繁体   English   中英

如何在另一个查询中使用 SELECT 查询的结果

[英]How to use result from SELECT query in another one

我需要在另一个查询中使用选定的行,而不是再次选择它们作为子查询。 如果可以在这里将它们存储为变量,那将是完美的。

我的意思是说:

/* First query: only one column returns (always), but multiple records, trying to store them as string */
SET @result := (SELECT GROUP_CONCAT(target_field SEPARATOR ',')
FROM table_one
WHERE condition;

/* Second query: need to pass saved array into IN() condition */
SELECT *
FROM table_two
WHERE id IN(@result);

但突然它不起作用,因为@result作为一个字符串值处理,而不是作为数组处理。

是否可以将变量作为数组传递? 允许任何替代解决方案(子查询除外)。

您可以在 where 条件中使用子查询。 这对于mySql应该没问题

SELECT *
FROM table_two
WHERE id IN(SELECT id from table_one where condition_one);

在这种情况下可以使用表之间的JOIN

SELECT *
FROM table_two
JOIN table_one ON table_two.id = table_one.target_field
WHERE table_one condition;

您可以使用 function FIND_IN_SET()

SELECT *
FROM table_two
WHERE FIND_IN_SET(id, @result);

如果不允许子查询,您可以使用存储过程:

尝试:

DELIMITER //
CREATE PROCEDURE my_procedure()
BEGIN
SET @result = "SELECT GROUP_CONCAT(target_field SEPARATOR ',') FROM table_one WHERE condition";
SET @finalqry = CONCAT("SELECT * FROM table_two WHERE id IN (", @result, ") ");
PREPARE stmt FROM @finalqry;
EXECUTE stmt;
END//
DELIMITER ;

叫它:

call my_procedure();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM