2012-03-01 23 views
2

我有4個表,default_table,表-A,表-B,table_c,各有兩列,
我想選擇nameid從所有的表,然後排序,
我嘗試"SELECT Name,ID FROM default_table, table_a, table_b, table_c ORDER BY Name"
但是這給我的錯誤,所以有人可以幫我解決這個問題,我需要的代碼在SQL或PHP,甚至是JavaScript的,如果它可以從兩個表不是爲了它

+0

Javascript是一種客戶端技術,因此不能直接與mysql進行交互。你得到的錯誤是什麼,這將有助於我們? – ncremins 2012-03-01 01:13:57

+0

'SELECT Error Name is ambiguos',類似於 – nyongrand 2012-03-01 01:15:37

+0

這是因爲你在多個表中有相同的列名,所以db不知道你想要哪一列 – scibuff 2012-03-01 01:17:18

回答

5

由於order by unioning後應用,你可以做:

select id, name from default_table 
    union all select id, name from table_a 
    union all select id, name from table_b 
    union all select id, name from table_c 
order by name 

你的問題是,你正在做的所有的笛卡爾乘積表中的數據,所以它無法弄清楚其中idname你的意思是。即使可以,由於乘法效應,你會得到比預期更多的行方式。你想加入數據只需加入所有的行到輸出。


進一步解釋的區別,假設你有兩個表:

table1   table2 
======   ====== 
id  name  id  name 
--  ----  --  ------ 
1  pax  1  jill 
2  bob  2  debbie 
3  joe 

查詢:

select a.id, a.name, b.id, b.name from table1 a, table2 b 

(笛卡爾乘積)會給你:

1 pax 1 jill 
1 pax 2 debbie 
2 bob 1 jill 
2 bob 2 debbie 
3 joe 1 jill 
3 joe 2 debbie 

(行數是產品各行計數),而:

select id, name from table1 
union all 
select id, name from table2 

(工會)會給你:

1 pax 
2 bob 
3 joe 
1 jill 
2 debbie 

(行數是個體行數的總和)。

+0

您的解決方案也工作,並且更短,謝謝 – nyongrand 2012-03-01 01:29:58

0

嘗試是這樣的

SELECT 
    t1.name AS t1_name, t1.id AS t1_id, 
    t2.name AS t2_name, t2.id AS t2_id, 
    t3.name AS t3_name, t3.id AS t3_id, 
    t4.name AS t4_name, t4.id AS t4_id 
FROM 
    default_table AS t1, 
    table_a AS t2, 
    table_b AS t3, 
    table_c AS t4 
ORDER BY t1.name 
+2

你沒有加入表,這會產生交叉-產品。 – Diego 2012-03-01 01:23:02

1

我猜你需要UNION(或UNION ALL):

SELECT * 
FROM 
    (SELECT Name, ID 
    FROM default_table 
    UNION ALL 
    SELECT Name, ID 
    FROM table_a 
    UNION ALL 
    SELECT Name, ID 
    FROM table_b 
    UNION ALL 
    SELECT Name, ID 
    FROM table_c 
) AS un 
ORDER BY Name 
+0

您的解決方案的工作,謝謝 – nyongrand 2012-03-01 01:25:04

+0

順便說一句,這裏不需要子選擇。 – paxdiablo 2012-03-01 01:25:57

+0

@paxdiablo:你說得對。我不確定。如果將括號內的子選項括在括號中,您甚至可以對子選擇進行排序並按順序排序。 – 2012-03-01 01:30:22