2017-05-10 112 views
1

之間的公共領域我有如下表: 表1(P,CRC,RTI,L1) 表2(P,CRC,RTI)如何LEFT JOIN和刪除兩個表

我想找到的所有記錄從p和CRC與表2相同的值表1,但刪除這些記錄與p和CRC相同的值在兩個表 爲器R不同的值我試圖

Select * FROM table1 t1 
LEFT JOIN table2 t2 
ON t1.p = t2.p and t1.crc = t2.crc 

但不知道如何刪除常見記錄

+1

你的標題說「刪除共同的字段」,你的問題說「刪除常見的記錄」。這是什麼? –

回答

0

我不知道我完全理解你的問題。假設你有這樣的表中記錄: 表1:

  1. (P,CRC,RTI,L1)的值(1,23,6,8)
  2. (P,CRC,RTI,L1 )值(1,23,7,5)
  3. (p,CRC,RTI,L1)的值(1,23,9,2)

表2:

  1. (對,crc,rti)值(1,23,7)
  2. (P,CRC,RTI)值(1,23,8)
  3. (P,CRC,RTI)值(1,23,9)

如果你想顯示的所有記錄表1其中table1.rti不等於table2.rti,然後嘗試下面的內容。這會給你表1行1(上面)。

SELECT t1.* 
FROM table1 t1 LEFT JOIN table2 t2 on 
    t1.p = t2.p AND t1.crc = t2.crc 
WHERE 
    t1.rti <> t2.rti 

根據您的評論下面,也許嘗試MINUS運營商。

SELECT * FROM table1 
MINUS 
SELECT t1.* 
FROM table1 t1 LEFT JOIN table2 t2 on 
    t1.p = t2.p AND t1.crc = t2.crc 
+0

感謝您的回覆, – Verver

+0

感謝您的回覆,我的問題是,如果我在表格1中有值(1,23,6,8),(1,33,6,7)和值(1,23,1)和(1,40,1)在table2中,我希望我查詢返回從表1中的(1,33,6,8),並不返回(1,23,6,8)從表1,因爲有值(1,23 ,1)其中t1.p = t2.p和t1.crc = t2.crc – Verver

+0

這是一個正確的方法嗎? SELECT * from table1 LEFT JOIN table2 ON t1.p = t2.p and t1.crc = t2.crc WHERE t2。rti IS NULL – Verver

1

列出實際需要的列可能會更好。但是,如果你想只列是連接鍵,那麼你可以使用USING

SELECT * 
FROM table1 t1 LEFT JOIN 
    table2 t2 
    USING (p, crc); 
0

看來,如果你想從table1,其中table2包含相同p和相同crc但不同rti至少一個記錄排除的所有記錄。 這可寫爲「獲取來自表1的所有記錄,其中沒有記錄具有相同的p和相同的crc但在table2中存在不同的rti」。

select * from table1 t1 
where not exists (
    select * from table2 t2 
    where t1.p = t2.p and 
     t1.crc = t2.crc and 
     t1.rti <> t2.rti) 

希望我對你有幫助。