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 joins 和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】:

假设您需要的表 BD 中的列具有相同的数据类型,那么您可以在 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中的情况的主要内容,如果未能解决你的问题,请参考以下文章

优化 js中的if else-if 语句 过多的情况

带有 SELECT 的 SQL 事务 ELSE IF

java中那些情况使用if语句时可以不用else?

如何在没有 if else 的情况下处理 Spring-MVC 项目中的错误?

用于sql查询的IF、ELSE语句

对于 iO,我有一个 if / else 代码块,对 UISwitch 中的变化做出反应。在某些情况下如何将 uiswitch 设置回关闭?