2012-06-14 59 views
0

我是SQL新手。從兩個不同的表中獲取結果有一個簡單的問題。簡單SQL從2個表中選擇(什麼是加入?)

我在數據庫中有兩個表。第一個表格有一個帶有id引用的列,它與第二個表中的行相對應。我需要執行哪些SELECT操作才能獲得結果,以便第二個表中的所有值都可以重新標識ID。要想象我正在討論的表格:

TABLE_USERS 
=========== 
id  username  group 
--  --------  ----- 
1  jim   A 
2  alice   A 
3  brandon  B 

TABLE_GROUPS 
============ 
id  groupname   members 
--  ---------   ------- 
A  designer   134 
B  photographer  39 

DESIRED_SELECTION 
================= 
id  username  group 
--  --------  ----- 
1  jim   designer 
2  alice   designer 
3  brandon  photographer 

謝謝!

+2

[你有什麼試過?](http://www.whathaveyoutried.com/) –

+0

@John Conde - 我真的不知道從哪裏開始。我一直在閱讀關於表連接的知識,但他們似乎並沒有替代數據,而是將多個列結合在一起而不會丟失一個 – skibulk

+1

您不需要具有TABLE_GROUPS.members列 - 可以通過執行「 COUNT()'在TABLE_USERS上。也就是說,有些系統會出於優化原因做這種重複(手動存儲計數) - 如果您有非常複雜的查詢或巨大的表格,那麼這很有用。 – halfer

回答

2

你這樣做,其實,想加入兩個表:

SELECT * FROM 
    TABLE_USERS LEFT JOIN TABLE_GROUPS 
    ON TABLE_USERS.group = TABLE_GROUPS.id 

連接表的關鍵是要找到必須在匹配值這兩個表,並使用on來告訴SQL匹配它們。此表有一個ID列,可讓您執行此操作=您將加入表格ON,然後列出需要相等的值。

如果您不想要兩個表中的所有列,那麼只需在最終查詢中列出所需的列即可。這意味着您不需要Select *,而是列出所需的列。如下所示,如果一個列在兩個表中都顯示爲具有相同的名稱,則需要預先指定表名,以便SQL知道您想要的值。

SELECT TABLE_USERS.ID, Username, Groupname 
    FROM TABLE_USERS 
    LEFT JOIN TABLE_GROUPS 
    ON TABLE_USERS.group = TABLE_GROUPS.id 
+0

+1,對原始問題進行了很好的廣義編輯。 – halfer

2

你想要一個JOIN:

SELECT 
    u.id, 
    username, 
    groupname 
FROM 
    TABLE_USERS AS u 
LEFT JOIN TABLE_GROUPS AS g 
    ON u.group = g.id 
+0

+1。儘管「LEFT」可能是一個「INNER」,除非用戶不可能有一個組。 – halfer

+0

@halfer絕對 - 但我們不知道。 – alexn