【发布时间】:2019-09-05 07:56:03
【问题描述】:
我需要帮助来创建查询 表A
+------------+--------------------+-------+
| product_id | name | price |
+------------+--------------------+-------+
| 13 | Product 13 | 5 |
| 14 | Product 14 | 2 |
| 15 | Product 15 | 3 |
| 16 | Product 16 | 2 |
| 17 | Product 17 | 15 |
+------------+--------------------+-------+
表 B
+----+------------+-------------+
| id | product_id | taxonomy_id |
+----+------------+-------------+
| 10 | 13 | 5 |
| 11 | 13 | 2 |
| 12 | 14 | 3 |
| 13 | 15 | 2 |
| 14 | 16 | 15 |
| 14 | 16 | 5 |
| 14 | 16 | 19 |
| 14 | 16 | 21 |
| 14 | 16 | 18 |
+----+------------+-------------+
我的尝试
SELECT *
FROM A
LEFT JOIN B ON B.product_id = A.product_id
WHERE IF(B.taxonomy_id IN ('5','15'),
IF(B.taxonomy_id IN ('2'), 1, 0), 0) = 1
GROUP BY A.product_id
我需要它来将表 A 中正确的结果返回给我
B.taxonomy_id 是“5”或“15”,B.taxonomy_id 是“2”
这个例子的结果是 -> product_id - 13
而且我还需要得到一些结果SELECT count(*) ... -> return is 1
【问题讨论】:
-
你的预期结果是什么
-
the reason why you should always have a primary/unique key when using innoDB .. 如果没有主键/唯一键,您或多或少会将 InnoDB 的多线程性能降级为锁定的 MyISAM ..
-
您当前的
where子句只会产生taxonomy_id不在[5, 15, 2]中的结果,因为一旦它在B.taxonomy_id IN ('5', '15')中为真,它就会直接转到B.taxonomy_id IN ('2')这将产生假,这导致0。我建议将其缩短为B.taxonomy_id IN ('2', '5', 15)
标签: mysql sql join where-clause