有A、B两个表,A表结构如下:
字段:id name
记录:1 ABC
B表如下:
字段:id name
记录:1 ABC
记录:2 ABC
记录:3 DEF
那么本人现在想找出B表中的第二条记录,把符合这种条件的数据全部找出来,本人写了一个语句,但是把B表中第三条记录也找出来了,这是本人不想要的结果,本人的SQL如下,请帮忙改正一下,谢谢~
SELECT
b.id,
b.name
FROM
B b
LEFT JOIN A b ON a.name = b.name
AND a.id = b.id
WHERE
a.nameIS NULL:
这个语句找出来的记录是:
记录:2 ABC
记录:3 DEF
但是本人只想找出:
记录:2 ABC
字段:id name
记录:1 ABC
B表如下:
字段:id name
记录:1 ABC
记录:2 ABC
记录:3 DEF
那么本人现在想找出B表中的第二条记录,把符合这种条件的数据全部找出来,本人写了一个语句,但是把B表中第三条记录也找出来了,这是本人不想要的结果,本人的SQL如下,请帮忙改正一下,谢谢~
SELECT
b.id,
b.name
FROM
B b
LEFT JOIN A b ON a.name = b.name
AND a.id = b.id
WHERE
a.nameIS NULL:
这个语句找出来的记录是:
记录:2 ABC
记录:3 DEF
但是本人只想找出:
记录:2 ABC
解决方案
30
select * from B b where exists (select 1 from A where b.name=name and b.id<>id);
10
SELECT
b.id,
b.name
FROM
(SELECT b.id,b.name FROM B b
JOIN a a
ON b.name = a.name) b
LEFT JOIN A a ON a.name = b.name
AND a.id = b.id
WHERE
a.name IS NULL;
b.id,
b.name
FROM
(SELECT b.id,b.name FROM B b
JOIN a a
ON b.name = a.name) b
LEFT JOIN A a ON a.name = b.name
AND a.id = b.id
WHERE
a.name IS NULL;