首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从其他表的跳过记录中提取记录

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

Stack Overflow用户
提问于 2016-08-12 04:55:10
回答 3查看 19关注 0票数 0

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

子用户表也有父用户的记录。我只想要所有儿童的产品。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-12 05:19:02

子用户中再使用一个带有标志( 1 for parant user, 0 for child user )的列的更好方法如下:

代码语言:javascript
复制
          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     |

获取所有子条目的

代码语言:javascript
复制
SELECT id, name FROM child_users WHERE flag = 0;
票数 0
EN

Stack Overflow用户

发布于 2016-08-12 05:00:50

我更喜欢使用子表与父表的LEFT JOIN来解决这个问题:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2016-08-12 05:24:05

这个:

代码语言:javascript
复制
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

它会根据需要返回一个输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38910205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档