在mysql中使用结果集的大小写

时间:2014-09-11 12:46:43

标签: mysql sql

我想在mysql中测试以下查询

SELECT result.* FROM 
(CASE WHEN (2 = 2) 
THEN
(SELECT * FROM mytable WHERE myID =2814 )
END) result ;

但它发送语法错误。 知道它有什么问题吗?

3 个答案:

答案 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 ;