我目前正在处理 3 个表:POV、Visit 和 Volume。
我基于的主表是 POV,它包含来自销售点的所有主要信息。
销量包含每个销售点过去 2 年销售点提供的每种产品的销量。
访问包含在每个销售点完成的访问日期。
我想要的是有一张像这样的大 table :
POV columns | Volumes columns | Visit columns
POV values | Volume values | Null
POV values | null | Visits
所有表格都有一个名为“povId”的列,其中包含每个销售点的唯一标识符。所以我可以用它来“链接”它们。
能否请您告诉我应该如何着手获得上述内容?
我知道工会会有所帮助,但我不确定如何进行。我想显示 POV 的所有销售点(例如,如果 VOlume 中没有数据,我想要 null)。
非常感谢您!干杯!
** 更新**双左连接代码:
Select * from (SELECT
[POV].[PovId] AS [PovId],
[POV].[Last Visit Date] AS [Last Visit Date],
[Visit].[VisitCode] as [VisitCode]
FROM [dbo].[POV] [POV]
LEFT JOIN [dbo].[Visit] [Visit] ON ([POV].[PovId] = [Visit].[PovId])) Tbl1 left join ( SELECT [POV].[PovId] AS [PovId2],
[Volume].[Volume] AS [Volume],
[Volume].[TMO] AS [TMO],
[Volume].[Brand Family] AS [Brand Family]
FROM [dbo].[POV] [POV]
LEFT JOIN [dbo].[Volume] [Volume] ON ([POV].[PovId] = [Volume].[PovId])
where [Volume].[Year] between year(getdate())-1 and year(getdate())) Tbl2 on Tbl1.[PovId]=Tbl2.[PovId2]
最佳答案
Union 绝对不是正确的选择。您要做的是 LEFT JOIN
。
来自 MySQL 中的 [LEFT JOIN][1]
文档:
MySQL implements an A LEFT JOIN B join_condition as follows:
[...]
If there is a row in A that matches the WHERE clause, but there is no row in B that matches the ON condition, an extra B row is generated with all columns set to NULL.
你会想做这样的事情:
SELECT POV.*, Visit.*, Volume.* FROM POV LEFT JOIN Visit ON POV.id = Visit.povId LEFT JOIN Volume ON POV.id = Volume.povId
附加条件可能会添加到 WHERE 或 LEFT JOIN 条件中,但要小心!因为结果可能不一样。
话虽如此,您需要通过添加更多信息(例如示例等)来改进问题。这样,整个社区将更多地利用我们的交流。
关于mysql - 联合SQL查询烦恼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38101422/