答案 0 :(得分:0)
我更喜欢使用父表的LEFT JOIN
子表来解决这个问题:
SELECT t1.*
FROM ChildUsers t1
LEFT JOIN ParentUsers t2
ON t1.by_id = t2.id AND
t1.name = t2.name
WHERE t2.name IS NULL
这里的诀窍是WHERE
条WHERE t2.name IS NULL
,它会丢弃任何与父母对应的记录。
正如@SHAZ在他的评论中指出的那样,将子条目标识为潜在父母的唯一方法是使用name
字段。如果不同的父母和孩子碰巧有相同的情况,那么孩子可能会被错误地从结果集中过滤掉。
演示:
答案 1 :(得分:0)
使用标记( 1 for parant user, 0 for child user )
在子用户中再添一列的更好方法如下:
child users
-------------------------------------
| id | name | by_id | flag |
-------------------------------------
| 1 | x | 1 | 1 |
| 2 | a | 1 | 0 |
| 3 | b | 1 | 0 |
| 4 | z | 3 | 1 |
| 5 | c | 3 | 0 |
| 6 | y | 2 | 1 |
| 7 | d | 2 | 0 |
| 8 | e | 1 | 0 |
要获取所有子条目:
SELECT id, name FROM child_users WHERE flag = 0;
答案 2 :(得分:0)
这一个:
SELECT a.id, a.name,a.by_id from
(select id,name,by_id from tbl_child) as a
left JOIN
(select id, name from tbl_parent)as b
on a.name = b.name where b.name is null
根据需要返回输出。