Слияние двух таблиц MySQL с уникальными полями - PullRequest
0 голосов
/ 14 июня 2011

В основном я пытаюсь объединить две таблицы в новую таблицу. Первая таблица содержит информацию о пользователях, а вторая таблица содержит информацию о покупках вместе с адресной информацией.

Конечным результатом будет новая обновленная таблица для пользователей, которая теперь включает адреса для каждого пользователя (например, почтовый индекс, штат, страна), которые будут объединены из таблицы Deals_Users_Assoc.

Вот мой запрос:

INSERT INTO NewUsers (User_ID, FirstName, LastName, City, StateProvince, Country, ZipCode, Username, Username_Clean, Password, Email, ActivationToken, LastActivationRequest, LostPasswordRequest, Active, Group_ID, SignUpDate, LastSignIn)

SELECT DISTINCT a.User_ID, a.FirstName, a.LastName, b.address_city, b.address_state, b.address_country, b.address_zip, a.Username, a.Username_Clean, a.Password, a.Email, a.ActivationToken, a.LastActivationRequest, a.LostPasswordRequest, a.Active, a.Group_ID, a.SignUpDate, a.LastSignIn

FROM Users a, Deals_Users_Assoc b

WHERE a.User_ID = b.user_id

GROUP BY a.User_ID;

Работает, но вставляет только данные для пользователей, которые также хранятся в таблице Deals_Users_Assoc (WHERE a.User_ID = b.user_id). Сотни идентификаторов пользователей все еще остаются в таблице Users.

Любая помощь будет оценена!

Ответы [ 3 ]

0 голосов
/ 14 июня 2011

Попробуйте использовать запрос SELECT с предложением LEFT JOIN -

SELECT a.User_ID, a.FirstName, a.LastName, b.address_city, b.address_state, b.address_country, b.address_zip, a.Username, a.Username_Clean, a.Password, a.Email, a.ActivationToken, a.LastActivationRequest, a.LostPasswordRequest, a.Active, a.Group_ID, a.SignUpDate, a.LastSignIn
FROM Users a
LEFT JOIN Deals_Users_Assoc b
  ON a.User_ID = b.user_id
GROUP BY a.User_ID;
0 голосов
/ 14 июня 2011

Я думаю, что вы хотите сказать,

...
from users a
left join deals_users_assoc b on b.user_id=a.user_id

Обратите внимание, что, если возможно иметь более одного адреса для данного user_id, отдельное предложение даст вам одну запись для каждого такого адреса, а не одну для каждого user_id. «Группировка по» не имеет никакого эффекта, потому что у вас нет агрегатных полей, т. Е. Нет полей с max, count, sum и т. Д.

Если вам нужен только один адрес для user_id, вам придется решить, как его выбрать. Вы можете выбрать один произвольно, сказав max (b.address_city) и т. Д. Но это, по сути, случайный выбор.

0 голосов
/ 14 июня 2011

В выбранном вами отдельном запросе измените псевдоним a = alias b на синтаксис Left Outer Join.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...