【发布时间】:2015-11-23 17:15:55
【问题描述】:
如果table B 行与table B select where 子句匹配,我需要从table A 中选择所有行并从table B 中选择匹配行。这是我带有子查询的外部LEFT JOIN,但它失败了。有人可以帮忙吗?
SELECT A.WRDWHSE,
A.WRDRTID,
A.WRDRPTLIN
FROM CWDDEV.WRTEMSTDP AS A
LEFT JOIN (SELECT B.RHRTID,
B.RHRTE,
B.RHSTAT,
B.RHPRTT
FROM PIRF3.RTEHED
WHERE B.RHWHSE=003 and
((B.RHSTSD =20151111 and B.RHSTST >=060000 ) or (B.RHSTSD=20151112 and B.RHSTST <=055959 )) and
B.RHTYPE NOT IN ('W') and
(B.RHRTE NOT LIKE 'EMP%') and
B.RHSTAT IN (1, 3, 4, 5, 6)) AS B
ON A.WRDWHSE=B.RHWHSE and A.WRDRTID=B.RHRTE
WHERE A.WRDWHSE=003
ORDER BY A.WRDRPTLIN
【问题讨论】:
-
请编辑您的问题并努力格式化您的查询。提示:行首的四个空格用于格式化代码。
-
看起来不错,尽管您甚至没有在输出中从 B 中选择列。它是如何失败的?
-
B 是外部选择已知的别名。 B 对于内部选择是未知的,因为它不在范围内;因此 B.RHRTID 无效 RHRTID 将是有效的。或者您需要将
PIRF3.RTEHED更改为PIRF3.RTEHED as B但是,我们不知道出了什么问题(以什么方式失败?有错误,没有数据什么?)所以我怀疑这真的是问题所在。 -
另外
B.RHWHSE不在子查询的选定值中;所以它不能加入它。这很可能是问题所在。将RHWHSE添加到内部选择中。另外我不知道为什么你需要 b.RHWHSE=003 因为外部选择会在加入时消除它们。 003 也是数字数据。如果是字符串,则需要将其用单引号'括起来,否则为什么要使用前导 00? -
实际上我最初有“PIRF3.RTEHED as B”,但我更改了代码,因为我在 QA 板上看到了一些东西。 SQL 现在回到“PIRF3.RTEHED as B”。我得到的错误是 A 不是有效的令牌,并且消息指向语句的 ON 部分中的 A.WRDWHSE。
标签: sql