2010-08-31 60 views
2

我在下面的查詢得到一個語法錯誤:MySQL的WHERE總是需要一臺

SELECT 1,2 WHERE 1=1

但這查詢工作正常:

SELECT 1,2 FROM (SELECT 1) t WHERE 1=1;

它幾乎看起來像一個WHERE子句總是需要一個表。有時,在複雜查詢的深度中,使用SELECT/WHERE組合打開和關閉某些功能是非常好的。有沒有辦法不總是添加FROM (SELECT 1) t

編輯:

我發現了另一個類似的問題

 

(SELECT 1 x) 
UNION 
(SELECT 2) 
WHERE 1=1 
 

給出了一個語法錯誤,但這並不:

 

SELECT x 
FROM 
(
    (SELECT 1 x) 
    UNION 
    (SELECT 2) 
) t 
WHERE 1=1 
 

我使用5.1.48-community MySQL Community Server (GPL)。有沒有人看到這個?

回答

0

此:

SELECT 1 x 
UNION 
SELECT 2 
WHERE 1 = 1 

是兩個查詢,用UNION結合。第二個查詢:

SELECT 2 
WHERE 1 = 1 

是無效的,因爲它同時仍使用WHERE錯過了FROM條款。

此:

SELECT x 
FROM (
     SELECT 1 x 
     UNION 
     SELECT 2 
     ) t 
WHERE 1 = 1 

是從共線視圖,這是再一次,兩個查詢與UNION組合的SELECT

這兩個查詢都不使用WHERE,所以他們沒有FROM也沒關係。兩個查詢都是有效的,結果查詢也是。

1

你可以使用「FROM DUAL」來表示你沒有從表中選擇。如:

SELECT 'Hello, World' FROM DUAL; 
+1

這是直接從[參考手冊](http://dev.mysql.com/doc/refman/5.0/en/select.html),但注意它後面的行:「DUAL純粹是爲了方便需要所有SELECT語句應該有FROM和可能的其他子句的人,MySQL可能會忽略這些子句,如果沒有引用表,MySQL不需要FROM DUAL。這表明你不需要「發表」聲明。讓我困惑的顏色。 – eykanal 2010-08-31 21:44:04

+0

@eykanal:如果您要使用'WHERE' – Quassnoi 2010-08-31 21:44:58

+0

@OMGPonies:而不是'PostgreSQL',則需要'FROM'子句。 – Quassnoi 2010-08-31 21:55:08