2011-04-02 87 views
0

我要加入兩個表來獲取兩個表中的數據,例如,請考慮以下兩個表:如何加入2個MySQL表

Table users: 
ID  user_name  email  ... .... 


Table messages: 
ID  user_name  message  ... ... 

user_name是兩個表中公共列。我怎樣才能加入兩個表,以便我可以從兩個表中獲取數據。例如,我想選擇表messages中的「message」和表「users」中的「email」,其中user_name是abc。

回答

2

用途:

SELECT u.*, m.* 
    FROM USERS u 
    JOIN MESSAGES m ON m.user_name = u.user_name 
WHERE u.user_name = 'abc' 

...查看所有用戶誰在表中有消息。這意味着,用戶無需消息將不會出現在輸出 - 所以你可能要改用以下內容:

SELECT u.*, m.* 
    FROM USERS u 
LEFT JOIN MESSAGES m ON m.user_name = u.user_name 
    WHERE u.user_name = 'abc' 

我建議:

  • 閱讀Visual Explanation of JOINs
  • 不使用user_name作爲表之間鏈接數據的標準,因爲用戶名可以更改,在此示例中,用戶名可能需要更新所有支持表。
  • 不使用ANSI-89連接語法,因爲它不支持OUTER連接,因此應被視爲棄用。我的例子是ANSI-92語法,並得到廣泛支持。
+0

你忘記了OP的陳述'WHERE user_name ='abc''的要求。 – 2011-04-02 17:55:42

+0

@Tomalak Geret'kal:已修正,儘管對於某人添加他們自己很微不足道。 – 2011-04-02 17:58:25

0
select m.message, u.email 
from 
    messages m join users u on 
     m.user_name = u.user_name 
where 
    u.user_name = 'abc' 
2

如果你看看MySQL網站,那裏有很多例子。大多數情況下,如果您顯示了一些您嘗試過的查詢,但沒有得到您想要的結果,人們會更樂意回答。

select users.user_name, users.email, messages.message from users,messages where users.user_name=messages.user_name where users.user_name='abc' 

這是一個相當基本的SQL語句。你可以做很多聰明的事情。你會是明智的,去看看你還有什麼可以做,因爲而不是嵌入你可以使用參數等的「ABC」部分

+0

Ew在你的語法。 – 2011-04-02 17:54:50

+0

進出口誦讀困難,我花了很多時間試圖正確拼寫。因此,我的語法往往受到影響,因爲我從未教過任何東西。我自學了幾乎所有我知道的東西。所以,我很抱歉,但我很傷心,因爲技術問題,我在網站上受到了我的語法批評。 – BugFinder 2011-04-02 18:03:32

+0

+1:僅靠語法是不足以證明我對此感到失望的。 – 2011-04-02 18:06:52

1
SELECT message, email 
FROM users U, messages M 
WHERE U.user_name = 'abc' AND U.user_name = M.user_name; 
+0

Yuck - ANSI-89連接語法:/ – 2011-04-02 17:52:32

+0

:)這是我的數據庫書籍中使用的語法。那麼,現在我知道它被稱爲ANSI-89,並且有ANSI-92。謝謝! – Asterisk 2011-04-02 18:20:10

+1

是的,它是有效的,但被認爲不推薦使用。當1992年的標準取代它的時候,教科書將它延續下去令人難過:/ – 2011-04-02 18:22:29

0

如果你想在兩個表中(所以不是用戶沒有消息)相匹配的數據:

SELECT * FROM users u, messages m WHERE u.user_name = m.user_name; 

如果你希望所有用戶,無論用戶的郵件和消息爲這些用戶誰有他們:

SELECT * FROM users u LEFT JOIN (messages m) ON (u.user_name = m.user_name); 

編輯:對不起,我誤讀。

SELECT * FROM users u, messages m WHERE u.user_name = m.user_name AND u.user_name = "abc";