2012-12-10 60 views
2

我有一個非常簡單的mysql查詢,只要這個'data'包含一個精確'id'的行,我想從兩個表table1和table2中獲取一些'data',所以我跑了準備要求:用聯合查詢兩個表

'select data from (
    select data from table1 union select data from table2) 
where id = :id' 

但它似乎沒有工作(順便說一句,我想簡單地'select data from table1, table2 where id = :id ') ,但沒有奏效。有人可以幫忙,我不知道我失去了什麼東西?

+0

這不是有效的SQL ...除非'數據'是一個列名 – mcalex

+0

我從教程抓住它,爲什麼不是? (對不起,我還不熟悉SQL) – user1611830

+0

從這裏開始:http://www.w3schools.com/sql/default.asp – mcalex

回答

2
select * from table1 where id = :id 
union all 
select * from table2 where id = :id 
0

我認爲你要找的是一個連接。有多種類型的連接,其中最常見的是LEFT JOININNER JOIN

LEFT JOIN返回行,即使匹配的數據不存在,並返回null作爲連接的數據。

INNER JOIN要求匹配的數據存在,如果匹配的數據不存在,則不返回任何內容。

實施例使用INNER JOIN

SELECT 
    table1.*, 
    table2.* 
FROM 
    table1 
    INNER JOIN table2 ON (table1.id = table2.id) 
WHERE 
    id = :id 
+0

不,我需要一個聯盟,因爲我想選擇從table1出現的相同'數據'和table2 – user1611830

+0

我不明白你爲什麼需要使用聯合,如果你想要做的是從table1和table2獲取數據,其中table2中的ID是1,並且table1中的ID是1,那麼可以使用JOIN 。您發佈的sql中沒有任何內容,需要您使用UNION。 – Kao

+0

當然,我真的不明白IINER JOIN過程,它會返回 – user1611830

0

選擇table1.data,從表1 table2.data其中table1.id = table2.id

+0

不,我需要獲取同樣的'數據'出現在表1和表2中 – user1611830

+0

當然,我不明白INNER JOIN過程,它會返回每行的情況下,我會有一個行的兩個副本'data'爲每個id的發生? – user1611830

1

聯盟是複雜的,無端在MySQL,我會而是依靠JOIN來執行我的陳述。