@
clino @
lhx2008 我测试这个 SQL 是无法列出“不包含”的
mysql> select * from tag where doc_id=1;
+--------+--------+
| doc_id | tag_id |
+--------+--------+
| 1 | 1 |
| 1 | 2 |
+--------+--------+
2 rows in set
可以确认 doc_id=1 包含 tag_id 1、2
用 td.tag_id != 2 的方法尝试列出 “不包含” tag_id 2 的 doc 记录:
mysql> select distinct d.* from `tag` td join `doc` d where td.tag_id != 2 and td.doc_id =
d.id;
+----+-------+
| id | name |
+----+-------+
| 1 | doc_1 |
| 2 | doc_2 |
+----+-------+
2 rows in set
可以看到因为 doc_id=1 有两条 tag 记录,所以这条 SQL 并无法正确排除 doc_id=1