到目前爲止,我看到的每個線程都是檢查重複行並避免它們。我試圖讓一個查詢只返回重複的行。我認爲這會像子查詢一樣簡單,但我錯了。然後,我嘗試以下內容:僅返回兩個表中的重複行
SELECT * FROM a
WHERE EXISTS
(
SELECT * FROM b
WHERE b.id = a.id
)
太過了。如何只返回重複的行?我目前正在經歷兩張桌子,但恐怕有大量的重複。
到目前爲止,我看到的每個線程都是檢查重複行並避免它們。我試圖讓一個查詢只返回重複的行。我認爲這會像子查詢一樣簡單,但我錯了。然後,我嘗試以下內容:僅返回兩個表中的重複行
SELECT * FROM a
WHERE EXISTS
(
SELECT * FROM b
WHERE b.id = a.id
)
太過了。如何只返回重複的行?我目前正在經歷兩張桌子,但恐怕有大量的重複。
我相信你貼的代碼將工作太像
SELECT * FROM a
WHERE EXISTS
(
SELECT 1 FROM b WHERE id = a.id
)
可以如做一個INNER JOIN
像
SELECT a.* FROM a
JOIN b on a.id = b.id;
您可以如用一個IN
運營商說
SELECT * FROM a where id in (select id from b);
如果沒有它們,那麼你可以使用UNION
如果兩個表滿足工會的限制與ROW_NUMBER()
功能像
SELECT * FROM (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY id ORDER BY id) AS rn
FROM (
select * from a
union all
select * from b) xx) yy
WHERE rn = 1;
使用此查詢,如果您檢查相關列,可能會更好。
SELECT * FROM a
INTERSECT
SELECT * FROM b
注意沿:有歧義,以你的意思是重複行什麼,以及你是否'重新談論重複的鍵,或者所有的字段都是相同的。我的回答涉及所有領域是相同的;其他一些人則認爲這只是關鍵。目前還不清楚你打算如何。
你可以嘗試
SELECT id, col1, col2 FROM a INNER JOIN b ON a.id = b.id
WHERE a.col1 = b.col1 AND a.col2 = b.col2
將根據需要等欄目。數據庫引擎應該足夠智能以便首先在索引列上進行比較,因此只要沒有僅在大量非索引字段上不同的行,它就會高效。 (如果你這樣做,那麼我認爲任何事情都不會特別有效。)
你是什麼意思重複?兩個表中存在的行還是兩次出現在單個表中的行?如果只有id是相同的,或者所有其他列都必須相同,那麼它是否是重複的? – Gary