gpt4 book ai didi

MySQL IF 和 JOIN 在 SELECT 查询中生成冗余行

转载 作者:行者123 更新时间:2023-11-30 21:27:37 24 4
gpt4 key购买 nike

我有 2 个表: foo - 包含有关事件的信息和

bar - 包含有关每个事件是否满足 SLA 的信息。

foo 中的每个事件将在 bar 中有 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 行。

Here's a fiddle

这是我试过的 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 ;

我已经在没有子查询的情况下尝试过这个,我也尝试过向 bar 上的子查询添加额外的连接条件。两者都没有消除重复项。单独执行一个子查询会产生重复的行,因此我假设 IF 存在问题,但我不知道有什么不同的方法可以实现我想要的结果。

最佳答案

当我在两个子查询上删除 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 ;

Updated Fiddle

关于MySQL IF 和 JOIN 在 SELECT 查询中生成冗余行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58122441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com