具有两个表1.父用户2.子用户

子用户表也有父用户的记录。我只想要所有儿童的产品。
发布于 2016-08-12 05:19:02
在子用户中再使用一个带有标志( 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;发布于 2016-08-12 05:00:50
我更喜欢使用子表与父表的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字段。如果不同的父级和子级恰好具有相同的内容,则可能会错误地从结果集中筛选出子级。
演示这里:
SQLFiddle
发布于 2016-08-12 05:24:05
这个:
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它会根据需要返回一个输出。
https://stackoverflow.com/questions/38910205
复制相似问题