我想在mysql中测试以下查询
SELECT result.* FROM
(CASE WHEN (2 = 2)
THEN
(SELECT * FROM mytable WHERE myID =2814 )
END) result ;
但它发送语法错误。 知道它有什么问题吗?
答案 0 :(得分:0)
你可以像往常一样在一轮中做到这一点
SET @query := NULL;
SELECT @query := t.qry
FROM
( SELECT
CASE WHEN 2 = 2
THEN "SELECT * FROM mytable WHERE myID =2814"
WHEN another_condition
THEN "another_select"
END as qry
) t ;
PREPARE query1 FROM @query;
EXECUTE query1;
答案 1 :(得分:0)
评论太长了。
显然,您的查询等同于:
SELECT *
FROM mytable
WHERE myID = 2814;
这使你很难弄清楚你在问什么。
基本上,虽然case
是表达式,但from
子句不接受表达式。它接受表名,视图名,子查询等。其次,case
语句还有其他一些问题。
如果您想从多个表中进行选择 - 并且所有表都具有相同的结构 - 您可以使用union all
结构:
select t.*
from table2 t
where . . .
union all
select t.*
from table2 t
where . . .
答案 2 :(得分:0)
我更喜欢每次都使用不同的查询(这至少会让mysql有机会正确使用索引)。
但是假设有几个子查询需要作为数据源,具体取决于检查,那么可能是这样的: -
SELECT result.*
FROM
(
SELECT * FROM mytable WHERE 2 = 2 AND myID = 2814
UNION
SELECT * FROM mytable2 WHERE 1 = 2 AND myID = 2814
UNION
SELECT * FROM mytable3 WHERE 3 = 2 AND myID = 2814
) result ;