2011-10-27 50 views
0

從單一的錶行中選擇兩行我有一個表A (Id1, Id2, someValue)在MySQL的

我想在MySQL中實現什麼:

SELECT查詢應該返回 兩行:

Id1, someValue 
Id2, someValue 

(基於一定的條件 - 例如,其中someValue中> N)

我怎樣才能實現這一點,而無需使用UNION

+2

爲什麼不使用'UNION'?我看不到任何其他方式...... –

+0

爲什麼不使用'UNION'語句? – nfechner

+0

我不想使用Union,因爲我不想複製整個複雜的查詢,否則它們將會是相同的。給我的查詢還剩下七張表(好吧,我知道這已經不是那麼高效了,但仍然)。這個特定的條件是與其中一個連接。 –

回答

0

難道你不只是使用一個或?例如:

select * from A where someValue = 'x' OR someValue 'y' 
+0

結果將是(Id1,Id2,someValue),而我需要兩行(Id1,someValue)和(Id2,someValue)。 [我需要兩排] –

+0

非常真實,對不起,沒有正確看待你的問題,最好使用聯盟! – Ric

1

因爲這是不可能的,而無需使用UNION,這裏是如何與它進行歸檔此:

(SELECT ID1 as ID, someValue FROM A WHERE someValue > N) 
UNION 
(SELECT ID2 as ID, someValue FROM A WHERE someValue > N) 
+0

使用'UNION ALL',否則MySQL將抑制重複行,並且即使兩個查詢都返回一行,您也可能會得到一行。 –

1

如何:

SELECT 
    CASE 
     WHEN somecondition THEN ID1 
     ELSE ID2 
    END AS ID, someValue 
FROM that_table 

somecondition可以是表達式與您在WHERE子句中使用的表達式類似。

+0

我認爲這與我所尋找的非常接近。謝謝。 –

0

如果你需要分隔行的返回,你最好將數據庫模式拆分爲「id,someValue」。插入時,只需插入{id1_value,someValue},{id2_value,someValue},然後在檢索時從表中選擇value = someValue。你會得到你期望的回報。

如果需要涉及ID1和ID2以某種方式(讓一個鏈表或其他),你可以將相關的ID添加到該條目。該架構可能是 {id,value,related_id}。