mysql中带有结果集的案例
我想在mysql中测试以下查询mysql中带有结果集的案例,mysql,sql,Mysql,Sql,我想在mysql中测试以下查询 SELECT result.* FROM (CASE WHEN (2 = 2) THEN (SELECT * FROM mytable WHERE myID =2814 ) END) result ; 但它发送的是语法错误。 你知道这有什么问题吗?你可以这样绕圈子做 SET @query := NULL; SELECT @query := t.qry FROM ( SELECT CASE WHEN 2 = 2
SELECT result.* FROM
(CASE WHEN (2 = 2)
THEN
(SELECT * FROM mytable WHERE myID =2814 )
END) result ;
但它发送的是语法错误。
你知道这有什么问题吗?你可以这样绕圈子做
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;
这篇评论太长了 显然,您的查询相当于:
SELECT *
FROM mytable
WHERE myID = 2814;
这使得你很难弄清楚你在问什么
从根本上说,尽管case是一个表达式,而且from子句不接受表达式。它接受表名、视图名、子查询等。其次,案例陈述还有一些其他问题
它返回一个标量值。子查询可以返回多行。
不允许返回多个列
所有的子句都需要返回相同的内容
如果要从多个表中进行选择,并且所有表都具有相同的结构,则可以使用union all构造:
select t.*
from table2 t
where . . .
union all
select t.*
from table2 t
where . . .
我希望每次都使用不同的查询,这至少会让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 ;
你想实现什么?你到底想做什么?上面的查询不需要case语句。我将在不同的情况下从不同的表返回不同的resultset。首先,我只是想测试我是否可以返回基于案例的结果集。这只是一个示例,我的实际查询在不同的情况下会有所不同cases@KamranShahid . . . 也许您应该问另一个问题,提供足够详细的信息来提供有用的答案,除非John建议的动态SQL适合您。不要编辑此问题-这对我们这些以当前形式回答此问题的人来说是不公平的。问题是OP似乎只想执行特定的查询,这可能会导致运行时问题完全同意,但这就是动态构建sql的目的。这个解决方案将以他目前想要的方式工作,并且考虑到大多数联合查询不会带来任何相对高效的结果。缺点是,在子查询结果上使用一次的where子句不会使用任何索引。