MySQL IFs和联接在SELECT查询中生成冗余行
我有两张桌子:MySQL IFs和联接在SELECT查询中生成冗余行,mysql,Mysql,我有两张桌子: foo-其中包含有关事件和事件的信息 条形图-其中包含关于每个事件是否满足SLA的信息 foo中的每个事件将在栏中有1行或2行相应的行,具体取决于事件的类型 我想在foo中创建每个事件的主视图,其中包含一列,说明是否从bar中满足了每种类型的SLA。我在子查询中使用IF来标识SLA的类型。 预期产出为: | ID | NAME | Thing1 | Thing2 | Response | Resolution | ______________
foo
-其中包含有关事件和事件的信息
条形图
-其中包含关于每个事件是否满足SLA的信息
foo
中的每个事件将在栏中有1行或2行相应的行,具体取决于事件的类型
我想在foo
中创建每个事件的主视图,其中包含一列,说明是否从bar
中满足了每种类型的SLA。我在子查询中使用IF
来标识SLA的类型。
预期产出为:
| ID | NAME | Thing1 | Thing2 | Response | Resolution |
__________________________________________________________________________
| 11111| John | apple | 12 | Met | Missed |
| 33333| Sean | grape |5 | | Missed |
每次事件我得到4行结果,而我只需要一行
这是我尝试的SELECT语句的最后一个版本,每个ID返回4行:
SELECT foo.id
, foo.name
, foo.thing1
, foo.thing2
, x.Response
, y.Resolution
FROM foo
INNER JOIN (
SELECT foo.id
, IF (bar.svttitle LIKE "Response", bar.measurement_status, "") AS "Response"
FROM foo INNER JOIN bar ON foo.id = bar.id
) AS x ON foo.id = x.id
INNER JOIN (
SELECT foo.id
, IF (bar.svttitle LIKE "Resolution", bar.measurement_status, "") AS "Resolution"
FROM foo INNER JOIN bar ON foo.id = bar.id
) AS y ON foo.id = y.id ;
我在没有子查询的情况下尝试了这一点,还尝试在栏上的子查询中添加额外的连接条件。双方都没有消除重复的情况。
单独执行一个子查询会产生重复的行,因此我假设IF
有问题,但我不知道有什么不同的方法来实现我想要的结果。当我删除IF
并用替换它时,在两个子查询上,我都会得到预期的结果:
SELECT foo.id
, foo.name
, foo.thing1
, foo.thing2
, x.Response
, y.Resolution
FROM foo
LEFT JOIN (
SELECT foo.id
, bar.measurement_status AS "Response"
FROM foo INNER JOIN bar ON foo.id = bar.id
WHERE bar.svttitle LIKE "Response"
) AS x ON foo.id = x.id
LEFT JOIN (
SELECT foo.id
, bar.measurement_status AS "Resolution"
FROM foo INNER JOIN bar ON foo.id = bar.id
WHERE bar.svttitle LIKE "Resolution"
) AS y ON foo.id = y.id ;
当我在两个子查询上删除IF
并用WHERE
替换它时,我得到了预期的结果:
SELECT foo.id
, foo.name
, foo.thing1
, foo.thing2
, x.Response
, y.Resolution
FROM foo
LEFT JOIN (
SELECT foo.id
, bar.measurement_status AS "Response"
FROM foo INNER JOIN bar ON foo.id = bar.id
WHERE bar.svttitle LIKE "Response"
) AS x ON foo.id = x.id
LEFT JOIN (
SELECT foo.id
, bar.measurement_status AS "Resolution"
FROM foo INNER JOIN bar ON foo.id = bar.id
WHERE bar.svttitle LIKE "Resolution"
) AS y ON foo.id = y.id ;
Plz也分享预期输出。Plz也分享预期输出。如果这回答了您的问题,请随意接受。如果这回答了您的问题,请随意接受