2017-05-10 76 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) 

希望我对你有帮助。