Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中带有结果集的案例_Mysql_Sql - Fatal编程技术网

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

我想在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
             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子句不会使用任何索引。