【发布时间】:2012-11-26 18:08:26
【问题描述】:
我必须编写一个LEFT JOIN 查询来查找确实存在于一个表中并存在于另一个表中的记录(左连接的标准用法)。此表中只有一个表用于连接。
表名:products
加入条件栏:prdname
两个where子句条件:subdivision='abc', subdivision='xyz'
客观
通过这两个 where 子句,我将得到两个包含两组 prdname 的结果,我必须找到在一个中存在但在另一个中不存在的 prdname。
当我编写标准LEFT JOIN(下面的案例2)时,它没有给出任何不正确的结果,所以我编写了一个子查询来检查结果。它是 8 条记录,所以我决定在这里将查询修改为 case1,它起作用了。
我怀疑它们两者几乎相同,那么为什么 second 不正确?
谁能帮帮我?
另外,abc 和 xyz 是随机值,所以请多注意它们。
工作的案例:
SELECT a.prdname
FROM products a
LEFT OUTER JOIN (SELECT prdname
FROM products
WHERE subdivision = 'xyz') b
ON a.prdname = b.prdname
WHERE a.subdivision = 'abc'
AND b.prdname IS NULL
不工作的情况
SELECT DISTINCT( a.prdname )
FROM products a
LEFT OUTER JOIN products b
ON a.prdname = b.prdname
WHERE a.subdivision = 'abc'
AND b.subdivision = 'xyz'
AND b.prdname IS NULL
要测试的子查询查询
SELECT DISTINCT( prdname )
FROM products
WHERE subdivision = 'abc'
AND prdname NOT IN (SELECT DISTINCT prdname
FROM products
WHERE subdivision = 'xyz')
【问题讨论】:
-
“查找确实存在于一个表中并存在于另一个表中的记录” - 这不是 LEFT JOIN 的标准用法。错字,或对连接的错误理解?
-
错字我猜应该不是。对吗?
-
@Batman 你在想
INNER JOIN。请向我们展示一个样本数据集以及所需的结果。 -
你必须告诉我们你想要得到什么。
-
@njk 格式不错。谢谢你。