【问题标题】:SQL Select - Flag if the value appears in another tableSQL Select - 如果值出现在另一个表中,则标记
【发布时间】:2021-08-26 19:03:02
【问题描述】:

更新:有人知道如何在 Pyspark 中进行操作吗?

尝试通过 SPARK SQL 查询工作。我有两个表,如果 a.id 中的值出现在 b.id 中,则需要创建一个列来标记。 行总是有语法错误,提到'mismatched input'a',应该期待EOF,';' '。我不能使用“JOIN”,因为 a.id 在 b.id 中有多次出现,并且表格被弄乱了。 enter image description here 表一:

[ID][描述]

112 毫米

121 神经网络

123 天

表b:

[ID][操作]

112 次​​p>

112 乙

112C

131 次

 SELECT a.ID,

 CASE WHEN a.ID IN (SELECT b.ID FROM b) THEN 'appear' 

        ELSE 'no'

        END AS Flag 

FROM a

【问题讨论】:

  • 我觉得语法没问题。
  • 您的代码看起来不错。建议您标记您的数据库,并可能创建一个 DB Fiddle 来展示您的特定问题。
  • 既然您添加了数据的屏幕截图,也许添加您实际查询的屏幕截图?当您重新输入您丢失的内容时,也许您正在修复某些内容。
  • 我在 Spark SQL 下执行此操作。你认为这是它不起作用的原因吗?

标签: sql select case


【解决方案1】:

试试这个。它的重量要轻一些。

SELECT  a.ID
        ,ISNULL((
                    SELECT  'appear'
                    FROM    b
                    WHERE   a.ID = b.ID
                ), 'no'
               ) AS Flag
FROM    a;

这是使用 OUTER APPLY 回答同一问题的另一种方法。

SELECT  a.ID
        ,CASE
             WHEN hc.HitCount > 0 THEN 'appear'
             ELSE 'no'
         END AS Flag
FROM    a
        OUTER APPLY (
                        SELECT  COUNT(1) AS HitCount
                        FROM    b
                        WHERE   a.ID = b.ID
                    ) AS hc;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多