2013-01-20 60 views
1

我怎樣才能得到所有數據來自這2個表:來自兩個表的SQL SELECT - 需要連接嗎?

Events 
    cid date 
    1 1/12/2013 
    2 2/2/2013 
    1 5/5/2014 

    Clients 
    cid name  gender 
    1 david male 
    2 ashley female 
    3 barak male 

,我想做出請求來獲取所有事件與像CID數據:

Final 
    cid date   name gender 
    1  1/12/2013 david male 
    2  2/2/2013  ashley female 
    1  5/5/2013  david male 
+1

是的,你需要一個加入。 [你有什麼嘗試](http://whathaveyoutried.com)?請發佈您的查詢,並解釋什麼是不工作和你卡住的地方。 – Oded

+0

你是什麼意思,當你選擇*你得到身份證兩次?你的輸出上面有兩次cid?由於某些原因,您是否需要選擇*與字段名稱? – sgeddes

回答

2

假設你的要求是SELECT *(爲什麼),那麼你可以將所有以前的答案包裝在子查詢中。類似這樣的:

select * from 
(
    SELECT 
    E.cid, 
    date, 
    name, 
    gender 
FROM Events E 
LEFT JOIN Clients C 
    ON E.cid = C.cid) t 

SQL Fiddle

祝你好運。

0
select * from Events join Clients on Clients.cid = Events.cid; 
+0

問題,如果我做SELECT *我得到了兩次id,我只能得到一個? – MTA

+0

然後,不要使用'*',只需從每個表中指定所需的列。 – John

0
SELECT 
    E.cid, 
    date, 
    name, 
    gender 
FROM Events E 
LEFT JOIN Clients C 
    ON E.cid = C.cid 

的Left Join負責在客戶表中沒有關於事件cid的條目

如果存在是表之間的參照完整性,並且可以保證客戶表中至少有一個條目,那麼可以用INNER JOIN替換LEFT JOIN。但這一切都取決於你有什麼數據和你的查詢限制。

除非您確定不排除相關數據,否則絕不要假設INNER JOIN。

+0

問題如果我做SELECT *我得到了兩次id,我只能得到一個? – MTA

+0

我不是建議你做一個選擇* –

0

您將要JOIN表:

select e.cid, 
    e.date, 
    c.name, 
    c.gender 
from clients c 
inner join events e 
    on e.cid = c.cid 

SQL Fiddle with Demo

如果您需要幫助學習連接語法,這裏是一個偉大的visual explanation of joins

我使用了INNER JOIN來加入表格,這將返回clients表格中具有events表格中匹配行的所有行。如果你想在events表返回所有clients不管一排那麼你可以使用一個LEFT JOIN

0

表是在第一個字母大寫

SELECT e.cid, e.date, c.name, c.gender 
FROM Events AS e 
LEFT JOIN Clients AS c 
ON e.cid = c.cid 
+0

問題,如果我做SELECT *我得到了兩次id,我可以只有一個? – MTA

+0

沒有理由將其包裝在另一個SELECT中。這太荒謬了。 – keyboardSmasher