假设我有table1
这样的:
id | itemcode
-------------
1 | c1
2 | c2
...
像table2
这样:
item | name
-----------
c1 | acme
c2 | foo
...
以下两个查询会在每种条件下返回相同的结果集吗?
SELECT id, itemcode
FROM table1
WHERE itemcode IN (SELECT DISTINCT item
FROM table2
WHERE name [some arbitrary test])
SELECT id, itemcode
FROM table1
JOIN (SELECT DISTINCT item
FROM table2
WHERE name [some arbitrary test]) items
ON table1.itemcode = items.item
除非我真的错过了一些愚蠢的东西,否则我会说是的。但是我做了两个查询,归结为这种形式,我得到了不同的结果。有一些使用 WHERE IN 的嵌套查询,但对于最后一步,我注意到 JOIN 更快。嵌套查询都是完全隔离的,所以我不认为它们是问题,所以我只是想消除我对上述内容有误解的可能性。
感谢您的任何见解。
编辑
两个原始查询:
SELECT imitm, imlitm, imglpt
FROM jdedata.F4101
WHERE imitm IN
(SELECT DISTINCT ivitm AS itemno
FROM jdedata.F4104
WHERE ivcitm IN
(SELECT DISTINCT ivcitm AS legacycode
FROM jdedata.F4104
WHERE ivitm IN
(SELECT DISTINCT tritm
FROM trigdata.F4101_TRIG)
)
)
SELECT orig.imitm, orig.imlitm, orig.imglpt
FROM jdedata.F4101 orig
JOIN
(SELECT DISTINCT ivitm AS itemno
FROM jdedata.F4104
WHERE ivcitm IN
(SELECT DISTINCT ivcitm AS legacycode
FROM jdedata.F4104
WHERE ivitm IN
(SELECT DISTINCT tritm
FROM trigdata.F4101_TRIG))) itemns
ON orig.imitm = itemns.itemno
编辑 2
虽然我仍然不明白为什么查询会返回不同的结果,但似乎我们的逻辑从一开始就存在缺陷,因为我们在某些部分使用了错误的列。请注意,我并不是说我在解释上面写的查询时犯了错误或有一些错字,我们只需要选择一些不同的东西。
通常我不会在弄清这些事情的底部之前休息,但我很累,并且正在进入自一月份以来的第一个假期,跨越一天以上,所以我现在真的懒得再去寻找了. 我相信这里给出的提示稍后会派上用场。已为所有帮助分发了赞成票,我接受了 Ypercube 的回答,主要是因为他的评论让我走得最远。但是谢谢大家!如果我稍后发现更多信息,我会尽量记住 ping 回来。