这是那些日子之一,我只是无法弄清楚这一点。Where子句等于一个字段,不等于另一个
我有以下查询:
SELECT * FROM wp_posts
JOIN wp_term_relationships ON wp_term_relationships.object_id = wp_posts.ID
WHERE term_taxonomy_id = 80
显然,这种选择所有处于类别ID 80.我需要做的是选择所有在80类,但不是什么职位的职位在类别109
我已经试过这一点,但它只是选择从类别80
SELECT * FROM wp_posts
JOIN wp_term_relationships ON wp_term_relationships.object_id = wp_posts.ID
WHERE term_taxonomy_id = 80
AND term_taxonomy_id = 109
这里同样职位的表结构:
wp_posts
| ID |
------------
| 1 |
| 2 |
wp_term_relationships
| object_id | term_taxonomy_id |
|-----------|------------------|
| 1 | 80 |
| 2 | 80 |
| 1 | 109 |
OBJECT_ID匹配POST_ID
查询应该只因为ID 1返回ID 2在这两个80和109
我知道我这样做了一百万次,但我就是”为了我的生活得到这个工作。任何帮助?
+1,但回复:“一般情况下,在MySQL中,我们发现,JOIN操作(包括反连接操作)通常优于子查询“:对于某些类型的子查询,这是正确的,但根据我的理解,最近版本的MySQL在识别IN(...)和NOT IN(...)作为半连接和反连接时没有任何问题(分别)并相应地优化。 – ruakh
@ruakh ...这就是为什么我建议'EXPLAIN'输出和测试是合适的。它绝对取决于哪个版本的MySQL。例如,在MySQL 5.1中,NOT IN(子查询)不会产生与等价的“LEFT JOIN ... WHERE ... IS NOT NULL”查询相同的计划。 (有趣的是,'LEFT JOIN'查询在解释输出中显示''; not exists'',而一个'NOT EXISTS'查询显示了一个与'NOT IN'查询相同的计划,这两个查询都显示了'DEPENDENT SUBQUERY'解释输出。 – spencer7593