2012-09-23 60 views
0

我有2個表:如何從聯盟2臺

`tb_a` :   `tb_b` 

========   ======== 
|id|key|   |id|key| 
========   ======== 
| 1| A|   | 1| D| 
| 2| B|   | 2| E| 
| 3| C|   | 3| F| 
| 4| B|   | 4| B| 
========   | 5| A| 
       | 6| G| 
       ======== 

我希望工會keytb_atb_b。所以結果必須是= ABCDEFG。

,我已經嘗試的代碼是:

SELECT id, key 
    FROM tb_a 
UNION ALL 
SELECT id, key 
    FROM tb_b 
ORDER BY id 

,但它似乎並沒有工作。

+0

你得到了什麼錯誤? – tradyblix

+0

此外,如果您只想要'key'列,是否有理由選擇'id'列? – dsolimano

回答

0

,你將需要使用CONCAT在SQL查詢這樣的:

SELECT tb_a.id, tb_b.id, CONCAT(tb_a.key,tb_b.key) as Combined_key 
FROM tb_a, tb_b 
ORDER BY tb_a.id, tb_b.id 
0

如果您遇到的問題是重複的值,這是因爲UNION ALL的。改爲單獨使用UNION。

0

聯接不直接映射到集合理論(聯合,相交,差異)的基本疊加運算,它們通過簡單地包含或排除其他集合的元素來創建新集合。有很多方法可以讓SQL獲得這些信息,但它涉及鏈接UNION和MINUS語句。

連接,而是映射操作,通過從每個集合中獲取一個元素,根據一組規則,並將它們集合到一個新元素中,從而創建新集合,實際上它本身就是一個小集合包含其他集合中的原始兩個元素。

SELECT column_name(s) FROM table_name1 
UNION 
SELECT column_name(s) FROM table_name2 

注意,聯盟中的每個SELECT語句必須具有相同的列數。這些列也必須具有相似的數據類型。另外,每個SELECT語句中的列必須以相同的順序排列。

注意:默認情況下,UNION運算符只選擇不同的值。要允許重複值,請使用UNION ALL。

SELECT column_name(s) FROM table_name1 
UNION ALL 
SELECT column_name(s) FROM table_name2 

良好的閱讀

A Visual Explanation of SQL Joins - Coding Horror

0
SELECT GROUP_CONCAT(`key` ORDER BY `key` SEPARATOR '') AS 'key' 
FROM (
    SELECT `key` FROM tb_a 
    UNION 
    SELECT `key` FROM tb_b 
) a 
GROUP BY NULL 

編輯:我的壞。這裏:

SELECT * FROM (
    SELECT `id`,`key` FROM tb_a 
    UNION 
    SELECT `id`,`key` FROM tb_b 
) tb_ab 
GROUP BY `key` 
ORDER BY `key` 

雖然,您的答案不清楚id應該由哪個標準確定。

1

請勿在查詢輸出中使用id字段,因爲它會阻止將輸出按key分組。也不要使用UNION ALL,使用UNION代替:

SELECT `key` 
FROM tb_a 
UNION 
SELECT `key` 
FROM tb_b 
0
SELECT DISTINCT `key` FROM (
    SELECT key FROM tb_a 
    UNION 
    SELECT key FROM tb_b 
) AS t ORDER BY `key`