[英]How to use MySQL WHERE IN statement with subquery?
桌子
mysql> SELECT * FROM swaps_products;
+----+---------+-----------+------------+-----------+---------------------+
| id | swap_id | holder_id | swap_to_id | product_id| added |
+----+---------+-----------+------------+-----------+---------------------+
| 1 | 9 | 3 | 0 | 32 | 2017-01-06 10:43:52 |
| 2 | 11 | 13 | 0 | 3 | 2017-01-06 11:03:45 |
| 3 | 11 | 13 | 0 | 4 | 2017-01-06 11:03:45 |
| 4 | 11 | 3 | 0 | 32 | 2017-01-06 11:03:45 |
| 5 | 11 | 3 | 0 | 31 | 2017-01-06 11:03:45 |
| 6 | 11 | 3 | 0 | 30 | 2017-01-06 11:03:45 |
| 7 | 12 | 3 | 0 | 32 | 2017-01-06 14:16:13 |
| 8 | 12 | 3 | 0 | 31 | 2017-01-06 14:16:13 |
| 9 | 12 | 2 | 0 | 2 | 2017-01-06 14:16:13 |
| 10 | 12 | 2 | 0 | 1 | 2017-01-06 14:16:13 |
| 11 | 13 | 13 | 3 | 3 | 2017-01-12 14:31:44 |
| 12 | 13 | 13 | 3 | 4 | 2017-01-12 14:31:44 |
| 13 | 13 | 3 | 13 | 32 | 2017-01-12 14:31:44 |
| 14 | 13 | 3 | 13 | 31 | 2017-01-12 14:31:44 |
要swap_id = 13
,涉及四个乘积-3、4、31、32。 我需要可以让我进行所有其他交换(swap_id列表)的查询,其中涉及3、4、31、32个产品中的任何一个。
我有这个
SELECT sp.swap_id as swap_id, sp.holder_id as holder_id
-> FROM swaps_products as sp
-> JOIN swaps as s
-> ON s.id=sp.swap_id
-> WHERE (sp.swap_id != 13) AND
-> (s.rejected IS NULL) AND
-> ((s.swapped IS NULL) OR (s.swapped2 IS NULL)) AND
-> (sp.product_id IN (3,4,31,32));
JOIN对问题并不重要。 该查询有效,但问题是我只知道swap_id。 所以我尝试了这个:
(sp.product_id IN (SELECT product_id FROM swaps_products WHERE swap_id = 13));
但出现错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN swaps as s
ON s.id=sp.swap_id
WHERE (sp.swap_id != 13) AND
(s.rejected IS N' at line 2
我认为问题是子查询不会返回IN语句期望的数组。
IN语句要求结果是要检查的值的单列向量。
要直接回答您的查询:
select * from swaps_products where product_id in (SELECT product_id FROM swaps_products where swap_id = 13) and swap_id != 13
另外,根据上面的错误消息,您遇到的语法错误指向第二行; 我怀疑您where...in
查询中的where...in
没有包含FROM swaps_products as sp
。
SELECT DISTINCT y.*
FROM swaps_products x
JOIN swaps_products y
ON y.product_id = x.product_id
AND y.swap_id <> 13
WHERE x.swap_id = 13;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.