2011-04-02 92 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";