从其他表的表跳过记录中提取记录

时间:2016-08-12 04:55:10

标签: mysql sql mysqli

有两张桌子 1.家长用户 2.儿童用户

enter image description here

Child User表还包含Parent Users的记录。 我想要一个All Childs的输出。

3 个答案:

答案 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

这里的诀窍是WHEREWHERE t2.name IS NULL,它会丢弃任何与父母对应的记录。

正如@SHAZ在他的评论中指出的那样,将子条目标识为潜在父母的唯一方法是使用name字段。如果不同的父母和孩子碰巧有相同的情况,那么孩子可能会被错误地从结果集中过滤掉。

演示:

SQLFiddle

答案 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

根据需要返回输出。