簡體   English   中英

查找兩個表中具有不同值的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM