设置我想对在MySQL案例与结果在mysql中
SELECT result.* FROM
(CASE WHEN (2 = 2)
THEN
(SELECT * FROM mytable WHERE myID =2814)
END) result ;
测试下面的查询,但它正在发送语法错误。 任何想法它有什么问题吗?
设置我想对在MySQL案例与结果在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
子句不接受表达式。它接受表名,视图名称,子查询等。其次,case
声明还有其他一些问题。
如果你想从多个表中选择 - 和他们都具有相同的结构 - 你可以使用union all
结构:
select t.*
from table2 t
where . . .
union all
select t.*
from table2 t
where . . .
这只是一个示例,我的真实查询在不同情况下会有所不同 – 2014-09-11 13:10:41
@KamranShahid。 。 。也许你应该提出另一个问题,提供足够的细节来提供一个有用的答案(除非John提供的动态SQL为你工作)。不要编辑这个问题 - 对我们这些以当前形式回答它的人来说是不公平的。 – 2014-09-11 14:05:46
我宁愿每次(其中至少将使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 ;
这个问题看起来像OP只想执行一个特定的查询,这可能会导致运行时问题 – 2014-09-12 02:30:16
完全同意,但这就是你会动态地建立SQL来做。这个解决方案将以他目前想要的方式工作,并且考虑到大多数联合查询将带回任何应该相对高效的东西。下方是子查询的结果使用的任何where子句将不会使用任何索引。 – Kickstart 2014-09-12 08:04:23
你到底想达到什么目的? – Mureinik 2014-09-11 12:49:07
你想要做什么?上面的查询不需要case语句。 – 2014-09-11 12:50:40
我会做的是在不同的情况下,我会返回不同的表中不同的结果集。 首先,我只是想测试我是否可以返回基于大小写的结果集。 – 2014-09-11 12:52:33