联合SQL查询麻烦

时间:2016-06-29 13:42:31

标签: mysql sql

我目前正在使用3个表:POV,访问和音量。

我所依据的主要表格是POV,其中包含来自销售点的所有主要信息。

每个销售点的成交量包含销售点提供的每件产品的最近2年的数量。

访问包含每个销售点的访问日期。

我希望拥有的大桌子就是这样的:

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]

3 个答案:

答案 0 :(得分:0)

绝对是联盟不是要走的路。您尝试做的是LEFT JOIN

来自MySQL中的[LEFT JOIN][1]文档:

  

MySQL实现了一个A LEFT JOIN B join_condition,如下所示:

     

[...]

     

如果A中有一行与WHERE子句匹配,但没有   在B中与ON条件匹配的行,生成额外的B行   将所有列设置为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条件中添加其他条件,但要小心!因为结果可能不一样。

这就是说,您希望通过添加更多信息(例如示例等)来改进问题。通过这种方式,整个社区将更多地利用我们的交流。

答案 1 :(得分:0)

尝试这样的事情:

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])
  LEFT JOIN [dbo].[Volume] [Volume] ON ([POV].[PovId] = [Volume].[PovId])
where [Volume].[Year] between year(getdate())-1 and year(getdate()) 

答案 2 :(得分:0)

感谢您的帮助。我设法得到了我想要的东西。 我在POV和Visit之间进行了左连接,另一个在POV和Volume之间,然后是两者的联盟。 工作完美!再次感谢大家!