我有3个表格: tbl_article,tbl_channel,tbl_published显示在下面。
tbl_article
articleID title
1 lorum
2 ipsum tbl_channel
channelID channel
1 facebook
2 twitter
3 linkedintbl_published
publishedID channelID articleID
1 1 1
2 2 1tbL_articles包含所有文章,tbl_channels所有可以发布文章的渠道,tbl_published显示当前文章发布的所有渠道。
因此,在我上面的3个表格中,文章1“lorum”,是在Facebook和Twitter上发布的。但第一篇“lorum”并没有发布在Linkedin上。
我知道我可以使用JOINS显示文章1发布在其上的所有渠道,但希望获得文章1未在其上发布的所有渠道,在本例中仅为Linkedin。
我一直在寻找答案,但我不知道如何表达这个问题,因此我找不到答案。
发布于 2020-04-02 18:06:46
您可以检查您的频道是否不在已发布的表中
SELECT *
FROM tbl_channel
WHERE tbl_channel.channelID NOT IN
(
SELECT tbl_published.channelID
FROM tbl_published
WHERE tbl_published.articleID = 1
);发布于 2020-04-02 17:50:45
您可以使用NOT EXISTS和一个相关子查询来获取tbl_published中ID为1的频道和文章的所有条目。
SELECT c.*
FROM tbl_channel c
WHERE NOT EXISTS (SELECT *
FROM tbl_published p
WHERE p.articleid = 1
AND p.channelid = c.channelid);发布于 2020-04-02 19:05:56
如果您真的想在所有文章中使用此功能,那么可以使用cross join来生成所有组合,并过滤掉存在的组合:
select a.articleid, c.*
from tbl_article a cross join
tbl_channel c left join
tlb_published p
on p.channelid = c.channelid and p.articleid = a.articleid
where p.channelid is null;您还可以在where子句中筛选出一个或多个项目。
https://stackoverflow.com/questions/60988609
复制相似问题