mysql> SELECT DISTINCT s1.job_id FROM skill_usage AS s1 -> INNER JOIN skill_usage AS s2 ON s1.job_id = s2.job_id -> WHERE s1.skill_id IN -> AND s2.skill_id IN -------- | job_id | -------- | 3 || 4 || 6 | -------- 3 rows in set (0.00 sec) + O6 e% Z6 j) G' d4 e8 I
我做错了什么?如何阅读我的查询?我想是时候写一本好书或 了Udemy 课程,但我没有自己的封面。) Q* Y7 d7 Y( y; U- h
正确找到我的查询job_id= 6,但是错了(IMO)找到了job_id3 和 4AND条款。, E" T. _+ z: b
" B5 C% p1 C) _) n' q 解决方案: - M# w# V# c! T) J# v$ h0 P7 P2 L 您可以在这里使用聚合物:8 i+ @! w* q" G7 u9 |! ?) J2 a2 m
SELECT job_idFROM skill_usageWHERE skill_id IN (3,4)GROUP BY job_idHAVING MIN(skill_id) MAX(skill_id); 4 R5 P) T4 J- B0 O' v( ?0 f
本查询应受益于以下索引:1 N$ o6 W2 _- A& V4 ^8 e
CREATE INDEX idx ON skill_usage (skill_id,job_id); 3 z( S" b. K. X2 k O4 h