Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL IFs和联接在SELECT查询中生成冗余行_Mysql - Fatal编程技术网

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也分享预期输出。如果这回答了您的问题,请随意接受。如果这回答了您的问题,请随意接受