鉴于这些表格,我如何选择所有未标记的案例?

时间:2013-06-04 05:52:40

标签: mysql sql database

用户可以拥有无​​限数量的案例,案例可以包含零个或多个标签。如何选择标记的所有指定用户的案例?我正在使用MySQL。

cases:
  id        INT
  owner_id  INT
  title     TEXT

tags:
 id         INT
 owner_id   INT
 name       TEXT

case_tag (the pivot table):
  id        INT
  case_id   INT
  tag_id    INT

users:
  id        INT
  username  VARCHAR

2 个答案:

答案 0 :(得分:1)

SELECT  a.*, b.*
FROM    users a
        INNER JOIN cases b
            ON a.id = c.owner_id
        LEFT JOIN case_tag c
            ON b.id = c.case_id
WHERE   c.case_id IS NULL

查询的作用是基本上选择表case_tag上没有匹配记录的所有用户的所有情况。

要进一步了解联接,请访问以下链接:

使用LEFT JOIN的替代方法是NOT EXISTS

SELECT  a.*, b.*
FROM    users a
        INNER JOIN cases b
            ON a.id = c.owner_id
WHERE   NOT EXISTS
        (
            SELECT  NULL
            FROM    case_tag c
            WHERE   b.id = c.case_id
        )

答案 1 :(得分:0)

尝试

SELECT u.*, c.*
FROM users u JOIN cases c ON u.id=c.owner_id LEFT JOIN case_tags ct ON c.id=ct.case_id
WHERE ct.id IS NULL