如何加入2个mysql表

时间:2011-04-02 17:45:12

标签: mysql sql join

我想连接两个表来从两个表中获取数据,例如,考虑以下两个表:

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


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

user_name是两个表中的公共列。如何连接两个表,以便从两个表中获取数据。例如,我想从表格message中选择“messages”,并从表格“email”中选择“users”,其中user_name是abc。

5 个答案:

答案 0 :(得分: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'部分,你可以使用参数等。

答案 1 :(得分: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语法,并得到广泛支持。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分: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";