0

我有许多包含多列的查询,我想运行一个查询来按顺序测试它们,直到一个子查询返回结果。我发现 COALESCE 语句只允许您使用并返回每个子查询的单个列,这不适用于我的数据集:

subquery1 = SELECT col1, col2, col3 FROM table1 WHERE x = y
subquery2 = SELECT col2, col4, col7 FROM table2 WHERE t = p
subquery3 = SELECT col5, col8, col9 FROM table3 WHERE v = b

是否可以按顺序测试每个查询,直到其中一个返回行?

4

2 回答 2

0
SELECT  1 AS o, col1, col2, col3
FROM    table1
WHERE   x = y
UNION ALL
SELECT  2 AS o, col2, col4, col7
FROM    table2
WHERE   t = p
UNION ALL
SELECT  3 AS o, col5, col8, col9
FROM    table3
WHERE   v = b
ORDER BY
        o
LIMIT   1
于 2014-07-08T18:27:55.087 回答
0

如果您只想返回第一个带有行的查询,那么您应该编写一个过程:

delimiter $$
create procedure myProc()
begin
    if exists(SELECT col1, col2, col3 FROM table1 WHERE x = y) then
        SELECT col1, col2, col3 FROM table1 WHERE x = y;
    elseif exists(SELECT col2, col4, col7 FROM table2 WHERE t = p) then
        SELECT col2, col4, col7 FROM table2 WHERE t = p;
    elseif exists(SELECT col5, col8, col9 FROM table3 WHERE v = b) then
        SELECT col5, col8, col9 FROM table3 WHERE v = b;
    end if;
end $$
delimiter ;

然后调用它:

call myProc();
于 2014-07-08T18:33:04.337 回答