基本上我正在尝试将两个表组合成一个新表。第一个表包含有关用户的信息,第二个表存储有关购买的信息以及地址特定信息。
最终结果将是一个新的用户更新表,现在包含将从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表中。
任何帮助将不胜感激!
答案 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)等任意选择一个。但这实际上是随机选择一个。