【问题标题】:Return one row in a view based on a left join column value根据左连接列值返回视图中的一行
【发布时间】:2016-06-02 08:53:51
【问题描述】:

我有一个视图,我通过一系列左连接将外键值替换为它们的参考值。

这些表中的一个,可以在我加入的地方具有多对一关系

Example.exampleid = SLA.exampleId.

我的问题是 SLA 表有一个列,其中SLa.type 可以是AB,然后SLA.value 将有一个数字。这在我的视图中创建了一个重复的行,唯一的区别是SLA.typeSLA.value

我希望它返回SLA.typeA 的这些列,并且在给定example.exampleId 的表中没有任何内容时仍然不会破坏视图

例如简明扼要的视图选择查询:

Select Example.exampleId, SLA.type, SLA.value
FROM Example 
   LEFT JOIN SLA ON Example.exampleId = SLA.exampleId
WHERE SLA.type <> "B" OR SLA.type IS NULL or SLA.value IS NULL

一个 example.exampleId 在 SLA 表中只会有两行,一行用于类型 A,另一行用于类型 B。

任何想法都将不胜感激!

【问题讨论】:

    标签: mysql sql join view


    【解决方案1】:

    SLA.type &lt;&gt; "B" 条件移动到连接子句中,因为它仅在这种情况下适用于右侧列。在 weher 子句中,条件适用于整个数据集:

    Select Example.exampleId, SLA.type, SLA.value
    FROM Example 
       LEFT JOIN SLA ON Example.exampleId = SLA.exampleId and SLA.type <> "B"
    

    不过,我会考虑使用SLA.type = "A",以防万一您引入新的 SLA 类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      相关资源
      最近更新 更多