在带有 IN 子句的第二个查询中使用查询结果



我想在另一个查询中使用一个查询的结果。以前有人问过这个问题,但答案并没有帮助我找到解决方案。

第一个查询如下所示:

SELECT ID FROM table_1 WHERE post_status = 'wc-completed';

我可以把它放在一个变量中:

set @variable =(SELECT ID FROM table_1 WHERE post_status = 'wc-completed');

第二个查询如下所示:

SELECT * FROM table_2 WHERE post_id IN (1,2,3,4...);

我想,这可以工作:

set @variable =(SELECT GROUP_CONCAT(ID) FROM table_1 WHERE post_status = 'wc-completed');
SELECT * FROM table_2 WHERE post_id IN (@variable);

但它只使用第一个值。结果可能被视为字符串而不是值数组。谁能指出我正确的方向?

不需要Group_concat

并直接在选择中使用第一个选择

喜欢

SELECT 
* 
FROM table_2 
WHERE 
post_id IN (
SELECT
ID 
FROM 
table_1 
WHERE 
post_status = 'wc-completed'
)

不需要GROUP_CONCAT()
使用查询的结果,因为它在IN子句中:

SELECT * FROM table_2 WHERE post_id IN (
SELECT ID FROM table_1 WHERE post_status = 'wc-completed'
)

但也要考虑EXISTS哪个可以表现得更好:

SELECT t2.* FROM table_2 t2 
WHERE EXISTS (
SELECT 1 FROM table_1 t1
WHERE t1.post_status = 'wc-completed' AND t1.ID = t2.post_id
)

最新更新