設置我想對在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