【问题标题】:Case returns more than one value with join案例使用连接返回多个值
【发布时间】:2018-07-16 07:43:43
【问题描述】:

我在使用带有连接的 case 语句时遇到问题。

我有两张桌子。 tbl_a:

和 Tbl_b:

我正在运行以下查询:

SELECT
    tbl_a.id,
    (
        CASE
           WHEN tbl_b.param_type = 'Ignition' Then param_value
           WHEN tbl_b.param_type = 'Turn' Then param_value
           WHEN tbl_b.param_type = 'Speed' Then param_value
           WHEN tbl_b.param_type = 'Break' Then param_value 
        END 
    ) as value
FROM 
    public.tbl_a 
    JOIN public.tbl_b on tbl_b.id = tbl_a.id

我想为 tbl_a 中的每个 id 获取来自 tbl_b 的第一个匹配项。如果 tbl_b 中有一个 id 表明他的参数类型是“点火”,那么我想得到他的值。如果没有,那么我想获取参数类型“Turn”的值,依此类推。但是当我运行查询时,我得到了所有可能的匹配项:

我明白为什么我会得到这些结果,但我不知道如何得到我想要的结果。 任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 总是有点火吗?
  • @Paul 不,你可以看到 id 2 和 3 没有..
  • 所以,需要明确的是,您希望结果为2,7;5,8;1,2;3,7;4,7?

标签: sql join case amazon-redshift


【解决方案1】:

我认为这种方法可以满足您的要求:

SELECT a.id,
       COALESCE( MAX(CASE WHEN b.param_type = 'Ignition' THEN a.param_value END), 
                 MAX(CASE WHEN b.param_type = 'Turn' THEN a.param_value END),
                 MAX(CASE WHEN b.param_type = 'Speed' THEN a.param_value END),
                 MAX(CASE WHEN b.param_type = 'Break' THEN a.param_value END)
               ) as value
FROM public.tbl_a a JOIN
     public.tbl_b
     ON b.id = a.id
GROUP BY a.id;

【讨论】:

  • OP 发布的问题至少可以说有点模糊 - 列表似乎没有“顺序”,除了桌子本身持有的,我们都知道SQL 表顺序可能是一个变化无常的事情。我也可以问一下 - 你的和我的有什么不同(出于兴趣)?
  • @Paul 。 . .我对此很清楚。我很确定这是 OP 的想法,但只是把这个问题表述得非常混乱。我可能是错的,但这似乎是一个合理的解释。
  • 这不会仍然返回具有多个值的相同 ID 吗? (例如 1,2;1,4;1,8,如 OP 所示)
  • @Paul 。 . .谢谢你。查询现在符合我的预期。
【解决方案2】:

您可以GROUP 并拉出第一项...

SELECT 
    id, 
    FIRST(value) 
FROM 
    public.tbl_a AS a 
    INNER JOIN 
    public.tbl_b AS b 
        ON  a.id = b.id 
GROUP BY 
    a.id 

不过,您在这里遇到的问题是,除非有某种排序机制(例如时间或增量 ID),否则无法保证您的值始终按正确的顺序排列。

注意:

我是为标准 T-SQL 编写的,所以如果 Amazon RedShift 不完全遵循标准,您可能需要查看语法。

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 2019-01-13
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多