[英]Find columns whose values are distinct in two tables
我有兩個表具有相同的列,我想獲取兩個表中值均不同的那些列,我該如何實現?請幫助。
imageid是兩個表中的主鍵,第一個表中存在的imageid不必在第二個表中存在。
第一表:
imageid name id
1 priya 001
2 neha 002
3 divya 003
4 santo 004
第二張表:
imageid name id
1 priy 001
2 neha 003
4 santo 004
結果
imageid firstdata seconddata columnname
1 priy priya name
2 002 003 id
假設您沒有重復項,那么您可以使用帶有union all
的基本inner join
來做到這一點:
select t1.imageid, t1.name as firstdata, t2.name as seconddata, 'name' as colname
from t1 join
t2
on t1.imageid = t2.imageid
where t1.name <> t2.name
union all
select t1.imageid, t1.id as firstdata, t2.id as seconddata, 'id'
from t1 join
t2
on t1.imageid = t2.imageid
where t1.id <> t2.id;
根據類型和數據庫,您可能需要將id轉換為字符串。
幾年前,我在AskTom.com上發現了以下方法,此后一直將其作為代碼模板使用。 我發現它相當快並且經常使用。
SELECT COUNT(src1) AS in_first_table, COUNT(src2) AS in_second_table, imageid, name, id
FROM (SELECT imageid, name, id,
1 AS src1,
to_number(NULL) AS src2
FROM first_table
UNION ALL
SELECT imageid, name, id,
to_number(NULL) AS src1,
2 AS src2
FROM second_table
)
GROUP BY imageid, name, id
HAVING COUNT(src1) <> COUNT(src2)
ORDER BY 3, 1 DESC;
前兩列(計數)指示在該表中找到了多少條記錄,它們可以標識表中具有多個匹配記錄的行。
我還通過將其放在WITH子句中來比較非常復雜的查詢,因此主查詢更易於閱讀。
例如:
WITH first_t AS
(SELECT imageid, NAME, id
FROM first_table),
second_t AS
(SELECT imageid, NAME, id
FROM second_table)
SELECT COUNT(src1) AS in_first_table,
COUNT(src2) AS in_second_table,
imageid, NAME, id
FROM (SELECT first_t.*,
1 AS src1,
to_number(NULL) AS src2
FROM first_t
UNION ALL
SELECT second_t.*,
to_number(NULL) AS src1,
2 AS src2
FROM second_t)
GROUP BY imageid,
NAME,
id
HAVING COUNT (src1) <> COUNT (src2)
UNION將返回結果的唯一記錄。 如果指定ALL(UNION ALL),將在結果集上保留重復項。
SELECT column1 column2 FROM first_table
UNION
SELECT column1 column2 FROM second_table
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.