if else sql中的情况
Posted
技术标签:
【中文标题】if else sql中的情况【英文标题】:if else situation in sql 【发布时间】:2020-10-04 14:36:12 【问题描述】:我有一个我在工作中使用的视图。
我的目标是:
如果 "data on row" = 'petrol' 那么列应该从 "A table inner join B table" 中获取
如果 "data on row" = 'diesel' 然后从 "C table inner join D table" 获取
这可能在视图查询的同一列中吗? (plsql)
我不能为此使用 if else 构造吗?问题仍未解决,因为我要使用的表没有公共列
如果 a =1 则从 sample_table 中选择 SAMPLE
如果一个 1 然后从另一个不同的唯一表中选择另一个不同
【问题讨论】:
请提供样本数据和期望的结果。 您可以在这种情况下使用union all
..但除非提供示例数据和预期结果很难同时提供。
我在下面提供了样本
请use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。在图像中包含图例/键和说明。此外,链接死了。使用编辑功能插入图像/链接。使您的帖子自成一体。将所需内容放入您的帖子中,而不仅仅是在链接中。
在 SQL 中,我们连接以从 2 个表中获取所有行对。 ON 或 WHERE 保留我们想要的配对。 ]SELECT 为这些行中的每一行输出一行。所以:你想保留哪些行对以及你想返回每对行的什么功能?我们可以合并 2 个表的所有行。 PS 在条件下返回 2 个不同的连接是一个常见问题。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:***.com 和标签;阅读许多答案。
【参考方案1】:
一种方法会为此使用left join
s 和coalesce()
。您的问题没有提供很多细节,但想法是:
select a.*,
coalesce(b.datas, d.data) as datas
from a left join
b
on . . . and a.column = 'diesel' left join
c
on . . . and a.column <> 'diesel' left join
d
on . . .
【讨论】:
【参考方案2】:假设您需要的表 B
和 D
中的列具有相同的数据类型,那么您可以在 WHERE
子句中使用带有过滤器的 UNION ALL
:
SELECT a.col1,
a.col2,
b.col3,
b.col4
FROM a INNER JOIN b ON ( a.id = b.id )
WHERE a.other_column = 'petrol'
UNION ALL
SELECT a.col1,
a.col2,
d.col3,
d.col4
FROM a INNER JOIN d ON ( a.id = d.id )
WHERE a.other_column = 'diesel'
【讨论】:
以上是关于if else sql中的情况的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 if else 的情况下处理 Spring-MVC 项目中的错误?
对于 iO,我有一个 if / else 代码块,对 UISwitch 中的变化做出反应。在某些情况下如何将 uiswitch 设置回关闭?