mysql - 联合SQL查询烦恼

标签 mysql sql

我目前正在处理 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/

相关文章:

mysql - 什么时候用 SQL 存储聚合数据有用

php - 二维 MySQL 查询?

MySQL 年间隔,包括上一年的整个月份

javascript - 是否可以使用 jQuery 突出显示段落标记内的特定行

mysql - 允许在 mysql 的 where 子句中重复

MySQL 回收表 - 自动执行替换而不是插入

mysql - 在ejabberd中配置mysql连接

sql - GROUP by ITEM number 和 Quantity to Stock 的总和

sql - 使用 Azure 数据工厂更新 SQL 表中的行

c# - 用于处理 MySQL 的带有队列的线程