【问题标题】:where clause in sql with multiple conditions based on priorities SQL BigQuerysql中的where子句具有基于优先级的多个条件SQL BigQuery
【发布时间】:2020-12-23 19:44:22
【问题描述】:

我有两个要在 BigQuery 中合并的表。我需要根据多个条件过滤数据。我需要返回 url = https://www.mywebpage%、duration = 15000 的所有字段,第三个条件应该获取 action = Midpoint 或 action = Complete。下面是代码:

SELECT
    d.duration,
    c.action,
    c.url
FROM
    (
        `table_action_url` c
        INNER JOIN `table_duration` d ON (d.id = c.id)
    )
WHERE c.url LIKE "https://www.mywebpage%" 
AND d.duration = '15000' 
AND c.action like 'Midpoint' 
OR (c.action like 'Complete') 

这将返回持续时间和 url 的不同字段,但正确的操作。我还尝试了以下方法:

SELECT
    d.duration,
    c.action,
    c.url
FROM
    (
        `table_action_url` c
        INNER JOIN `table_duration` d ON (d.id = c.id)
    )
WHERE (c.url LIKE "https://www.mywebpage%" AND d.duration = '15000' AND c.action like 'Midpoint')
OR (c.url LIKE "https://www.mywebpage%" AND d.duration = '15000' AND c.action like 'Complete')

此查询返回正确的 url 和持续时间,但对于操作,值都是完整的。 期望的输出是:

duration      action      url 
15000        Midpoint     https://www.mywebpage
15000        Complete     https://www.mywebpage
15000        Midpoint     https://www.mywebpage

【问题讨论】:

    标签: mysql sql filter google-bigquery where-clause


    【解决方案1】:

    你需要括号。不在FROM 子句中。在WHERE 子句中:

    FROM `table_action_url` c JOIN
         `table_duration` d
          ON d.id = c.id
    WHERE c.url LIKE 'https://www.mywebpage%' AND
          d.duration = '15000' AND
         (c.action LIKE 'Midpoint' OR c.action LIKE 'Complete') 
    

    在您的特定情况下,您可以将LIKE 替换为IN

    WHERE c.url LIKE 'https://www.mywebpage%' AND
          d.duration = '15000' AND
          c.action IN ('Midpoint', 'Complete') 
    

    但如果您想要通配符匹配,请改用regexp_contains()

    WHERE c.url LIKE 'https://www.mywebpage%' AND
          d.duration = '15000' AND
          REGEXP_CONTAINS(c.action, '^(Midpoint|Complete)$'
    

    【讨论】:

      【解决方案2】:

      ANDOR 之前...

      你有:

      WHERE (c.url LIKE "https://www.mywebpage%" 
             AND d.duration = '15000' 
             AND c.action like 'Midpoint')
      OR (c.action like 'Complete') 
      

      但你想要:

      WHERE c.url LIKE "https://www.mywebpage%" 
      AND d.duration = '15000' 
      AND c.action in ('Midpoint', 'Complete') 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        • 2020-12-13
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 2012-11-29
        相关资源
        最近更新 更多