mysql的联合查詢问题,求帮助

表结构是这样的: article 表:

id  title   cid
1   xxx     5
2   xxx2    6
3   xxxx3   7

article_line 关系表

article_id  line_id
1           20
1           21
1           22
2           20
2           28
2           40

现在的需求是: 查询 line_id 等于20, 且文章cid=6, 并且排除line_id=21的數據, 比如上面article_id=2的就符合,等于1的不符合

求大神帮忙实现

阅读 1.7k
2 个回答

查询 line_id 等于20, 且文章cid=6, 并且排除line_id=21这个需求你自己不觉得矛盾吗? 既然已经过滤只有 line_id=20, 那么结果集还需要排除line_id=21?

你的真实需求是不是 查询 line_id 等于20但是不等于21的所有文章?

这个场景使用Exists语句

SELECT a.*
FROM article a
WHERE 
  EXISTS(SELECT al.article_id
             FROM article_line al
             WHERE al.line_id = 20 AND al.article_id = a.id)
  AND NOT EXISTS(
    SELECT al.article_id
    FROM article_line al
    WHERE al.line_id = 21 AND al.article_id = a.id)
  )

select * from article where cid=6 and id in (select article_id from article_line where line_id=20)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题