как объединить 2 таблицы MySQL - PullRequest
0 голосов
/ 02 апреля 2011

Я хочу объединить две таблицы, чтобы получить данные из обеих таблиц, например, рассмотрим две следующие таблицы:

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


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

user_name является общим столбцом в обеих таблицах. Как я могу объединить обе таблицы, чтобы я мог получить данные из обеих таблиц. Например, я хочу выбрать «message» из таблицы messages и «email» из таблицы «users», где user_name - abc.

Ответы [ 5 ]

2 голосов
/ 02 апреля 2011

Если вы загляните на сайт 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», в которой можно использовать параметры и т. Д.

2 голосов
/ 02 апреля 2011

Использование:

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'

Я рекомендую:

  • чтение Визуальное объяснение JOINs .
  • не использует имя пользователя в качестве критерия для связи данных между таблицами, поскольку имена пользователей могут измениться, что потребует обновления всех вспомогательных таблиц в этом примере.
  • не использует синтаксис соединения ANSI-89, поскольку он не поддерживает соединения OUTER и должен рассматриваться как устаревший для этого факта. Мой пример - синтаксис ANSI-92 и широко поддерживается.
1 голос
/ 02 апреля 2011
SELECT message, email
FROM users U, messages M
WHERE U.user_name = 'abc' AND U.user_name = M.user_name;
0 голосов
/ 02 апреля 2011

Если вам нужны данные, которые совпадают в обеих таблицах (то есть, пользователь без сообщения):

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";
0 голосов
/ 02 апреля 2011
select m.message, u.email
from 
   messages m join users u on
      m.user_name = u.user_name
where
   u.user_name = 'abc'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...