我有這樣的查詢有兩種實現方式:爲什麼UNION ALL有和沒有括號表現不一樣?
SELECT race1, mode1
FROM organization
WHERE condition = 1 LIMIT 1
UNION ALL
(SELECT race2, mode2
FROM organization
WHERE condition = 1 LIMIT 1)
UNION ALL
(SELECT race, mode FROM organization_new
WHERE PK_Id = 1)
而且
SELECT race1, mode1
FROM organization
WHERE condition = 1 LIMIT 1
UNION ALL
SELECT race2, mode2
FROM organization
WHERE condition = 1 LIMIT 1
UNION ALL
SELECT race, mode FROM organization_new
WHERE PK_Id = 1
正如你所看到的,所不同的是僅在第一個查詢括號。 在第一個查詢中,我得到預期的結果(從所有三個選擇中獲得所有值,不需要解釋)。但是,當我繼續與第二個查詢,我得到的結果按要求,但不是如預期的,那只是從第一個選擇符合WHERE
條款的值。也就是說,如果有race1, mode1
其中condition = 1
,那麼我只得到那個結果。如果沒有,那麼我得到race2, mode2
,其中condition = 1
。如果第二個select語句是空的,那麼我會根據第三個select語句獲取值。如果沒有提供括號,爲什麼UNION ALL
的行爲類似於OR
?
編輯:我使用MySQL的5.0.51a
您必須對所有查詢使用相同的別名ex: - race1作爲race,mode1作爲 – 2012-04-18 08:34:31
@ sam_13模式,MySQL不需要它,列名將與第一個查詢中的名稱相同。在這種情況下'race1'和'mode1' .. – nawfal 2013-06-08 06:00:19