我有一个Select语句A。如果它没有产生结果,我希望使用Select B的结果。如果您愿意,Select B是Select A的"后备"。
选择A:
SELECT b FROM table_with_name WHERE a = 1
选择B:
SELECT b FROM other_table_with_name WHERE a = '-8'
通常我会使用'OR',但是由于语句依赖于完全不同的表,这似乎是不可能的。我该怎么做呢?
- 示例:**
具有名称的表
+---+-----+
| a | b |
+---+-----+
| 1 | abc |
+---+-----+
| 2 | def |
+---+-----+
| 3 | ghi |
+---+-----+
具有名称的其他表
+----+-----+
| a | b |
+----+-----+
| -8 | xyz |
+----+-----+
| 7 | mno |
+----+-----+
| 11 | tuv |
+----+-----+
- 想要的结果**
+-----+
| abc |
+-----+
如果要删除该条目,则需要以下(回退)结果:
+-----+
| xyz |
+-----+
2条答案
按热度按时间tpgth1q71#
执行
UNION ALL
。如果第一个SELECT
返回非空结果,则任务完成。否则返回第二个SELECT
的结果:tag5nh1u2#
如果有多个结果(* 子查询返回超过1行 *),此解决方案将引发错误。
使用CASE可以完成以下操作:
如果找到第一条语句的结果,则使用该结果。如果没有,则执行ELSE部分中的查询。