SQL Query使行不是连接的一部分

Boo*_*ean 5 mysql sql

我在桌子下面.

create table test(int id,int data1);
create table test1(int id,int data2);

insert into test values(1,1,);
insert into test1 values(2,2);
insert into test1 values(3,3);

insert into test1 values(1,1);
Run Code Online (Sandbox Code Playgroud)

现在我想要那些不参与加入的测试行.即我想要行(2,2)和(3,3).我想能够在mysql中做到这一点.

我不想因为性能而使用内部查询.

谢谢

OMG*_*ies 9

使用LEFT JOIN/IS NULL:

   SELECT t1.*
     FROM TEST1 t1
LEFT JOIN TEST t ON t.id = t1.id
                AND t.data1 = t1.data2
    WHERE t.id IS NULL
Run Code Online (Sandbox Code Playgroud)

假设列已连接,这是MySQL上最快/最有效的方法.否则,NOT IN/NOT EXISTS是更好的选择.

使用NOT EXISTS:

SELECT t1.*
  FROM TEST1 t1
 WHERE NOT EXISTS(SELECT NULL
                    FROM TEST t
                   WHERE t.id = t1.id
                     AND t.data1 = t1.data2)
Run Code Online (Sandbox Code Playgroud)