合并两个具有唯一字段的MySQL表

时间:2011-06-14 15:11:08

标签: mysql database

基本上我正在尝试将两个表组合成一个新表。第一个表包含有关用户的信息,第二个表存储有关购买的信息以及地址特定信息。

最终结果将是一个新的用户更新表,现在包含将从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)。数百个用户ID仍保留在Users表中。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

在您选择的不同查询中,从别名a = alias b更改为Left Outer Join语法。

答案 1 :(得分:0)

尝试将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;

答案 2 :(得分:0)

我想你想说的是

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

但请注意,如果给定user_id可能有多个地址,则distinct子句将为每个此类地址提供一条记录,而不是每个user_id一条记录。 “分组依据”无效,因为您没有聚合字段,即没有包含最大值,计数,总和等的字段。

如果每个user_id只需要一个地址,则必须决定如何选择一个地址。您可以通过说max(b.address_city)等任意选择一个。但这实际上是随机选择一个。