【问题标题】:How to fallback on second query if the first query yields no result?如果没有找到 A,我该如何选择 B?
【发布时间】:2022-01-26 08:38:12
【问题描述】:

如果没有结果,我有一个 Select-Statement A,我希望使用 Select B 的结果。

通常我会使用“OR”,但由于语句具有完全不同的 TABLES,这似乎是不可能的。我该怎么做?

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果,全部为格式化文本(无图像)。同时向我们展示您当前的查询尝试。 IE。 minimal reproducible example - 让帮助您变得轻松
  • 您的 result 是单个标量值吗?多个值?一个恰当的例子会让你的问题更清楚。
  • 根据您的查询和数据,您可以使用 union 或 join 来获得预期的输出。

标签: mysql sql select


【解决方案1】:

做一个UNION ALL。如果第一个 SELECT 返回一个非空结果,那么你就完成了。否则返回第二个SELECT的结果:

SELECT a FROM table_with_name WHERE a = 1
UNION ALL
SELECT b FROM other_table_with_name
WHERE b = 'xyz'
  AND NOT EXISTS (SELECT a FROM table_with_name WHERE a = 1)

【讨论】:

    【解决方案2】:

    使用 CASE 可以做到这一点。使用这种情况:

    SELECT 
      CASE WHEN EXISTS (SELECT a FROM table_with_name WHERE a = 1)
           THEN (SELECT a FROM table_with_name WHERE a = 1)
           ELSE (SELECT b FROM other_table_with_name WHERE b = 'xyz')
      END AS your_result
    

    如果为第一个语句找到结果,它将被使用。如果没有,则执行 ELSE 部分的查询。

    【讨论】:

    • 这可能会引发错误“subqeury 返回超过 1 行”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2020-09-30
    • 2022-10-01
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多