2015-01-08 43 views
1

這是一個艱難的cookie。我有兩個不相關的表 - 蔬菜水果。我不知道是否有可能做一個MySQL查詢以下所有步驟:如何將不相關的表格與臨時列彙總在一起

1)SELECTID兩個表。 2)向(1)中找到的每一行添加臨時列值 - tmp_type。蔬菜類型= 1,水果= 2。

3)來自兩個表和ORDER BY的綜合結果名稱

所以,這樣的事情:

enter image description here

任何想法?我真的想在數據庫級別上完成它,而不是在PHP控制器中操作兩個表結果,但我不確定實現該目標的最佳方式是什麼。

+1

看看'你'使用**精確**定義'聯盟'它會做你想做的。 –

回答

2

聯合查詢:

SELECT * FROM (
    SELECT id, name, 2 AS tmp_type 
    FROM fruit 

    UNION ALL 

    SELECT id, name, 1 AS tmp_type 
    FROM vegetable 
) AS foo 
ORDER BY name 

注意我用了排序的子查詢。你可以直接在聯盟內部進行排序,但是語法有點不可思議,應該是一個簡單的例子:http://dev.mysql.com/doc/refman/5.0/en/union.html

+0

嗨,非常好,泰克。不確定'AS foo'部分的確切用途是什麼。我知道這是optonal,'ORDER BY'可以在右括號之後直接出現,對嗎? – lesssugar

+0

編輯:**「每個派生表都必須有自己的別名」**因此,猜想它需要'AS foo'畢竟:) – lesssugar

2

作爲說明:子查詢不是必需的。這也應該工作:

SELECT id, name, 2 AS tmp_type 
FROM fruit 
UNION ALL 
SELECT id, name, 1 AS tmp_type 
FROM vegetable 
ORDER BY name; 
+0

是的,也行得通,很好。 – lesssugar

+0

這樣做也會更有效率(至少在MySQL版本5.5和更早的版本中),因爲它避免了實現派生表的(不必要的步驟)。 – spencer7593

相關問題