1

一个用户可以有无限数量的案例,一个案例可以有零个或多个标签。我将如何选择所有未标记的指定用户案例?我正在使用 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
4

2 回答 2

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 JOINNOT 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
        )
于 2013-06-04T05:55:17.380 回答
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
于 2013-06-04T05:57:23.360 回答