gpt4 book ai didi

sql - 将 SQL 表与自身进行比较(自联接)

转载 作者:行者123 更新时间:2023-12-04 05:21:49 25 4
gpt4 key购买 nike

我正在尝试根据混合列查找重复行。这是我所拥有的一个例子:

CREATE TABLE Test
(
id INT PRIMARY KEY,
test1 varchar(124),
test2 varchar(124)
)

INSERT INTO TEST ( id, test1, test2 ) VALUES ( 1, 'A', 'B' )
INSERT INTO TEST ( id, test1, test2 ) VALUES ( 2, 'B', 'C' )

现在,如果我运行此查询:
SELECT [LEFT].[ID] 
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST1] = [RIGHT].[TEST2]

我希望能取回两个 ID。 (1 和 2),但是我只取回了一行。

我的想法是它应该比较每一行,但我想这不正确?
为了解决这个问题,我已将查询更改为:
SELECT [LEFT].[ID] 
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST1] = [RIGHT].[TEST2]
OR [LEFT].[TEST2] = [RIGHT].[TEST1]

这给了我两行,但是根据行数,性能下降得非常快。

我为性能和结果提出的最终解决方案是使用联合:
SELECT [LEFT].[ID] 
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST1] = [RIGHT].[TEST2]
UNION
SELECT [LEFT].[ID]
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST2] = [RIGHT].[TEST1]

但总的来说,我显然不明白为什么这不起作用,这意味着我可能做错了什么。有人能指出我正确的方向吗?

最佳答案

不要在不等式上加入; JOIN 和 WHERE 条件似乎颠倒了。

SELECT t1.id
FROM Test t1
INNER JOIN Test t2
ON ((t1.test1 = t2.test2) OR (t1.test2 = t2.test1))
WHERE t1.id <> t2.id

应该工作正常。

关于sql - 将 SQL 表与自身进行比较(自联接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1890411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com