如果表 A 中的值不为空,我如何从表 B 中获取值

Posted

技术标签:

【中文标题】如果表 A 中的值不为空,我如何从表 B 中获取值【英文标题】:How do I get value from Table B if Value in Table A is not null 【发布时间】:2016-02-10 14:22:02 【问题描述】:

我是 SQL 查询的新手,但如果我是用我使用多年的编程语言编写的,它看起来像这样:

SELECT patfile.Chart_Number
    ,patfile.employer AS e_name
FROM patfile;

IF (
        patfile.employer = ''
        ,(
            SELECT addfile.NAME AS e_name
            FROM addfile
            WHERE patfile.employer = addfile.code
            )
        ,''
        ) ELSE patfile.employer AS e_name endif

最终结果应如下所示:

Patient     Employer
RUSTY
PAM         AT&T
DON         7 ELEVEN

有人可以帮我解决这个问题吗?

【问题讨论】:

样本输入/源数据? 对不起,“应该看起来像这样”的格式与我在问题中发布的格式不同。 Rusty 会出现没有雇主,而 Pam 会显示 AT&T 作为雇主,Don 会显示 7-11 作为雇主。 使用left outer join? 据我了解,您要求提供案例陈述 【参考方案1】:

主要是LEFT JOIN到附加表。

如果第一个为空(或空白,取决于您的数据),那么您必须选择第二个名称。我不知道 Advantage 数据库,但不同的 SQL 方言以不同的方式支持这一点。

如果缺失值为 null,而不是空白,则 mysql 和 SQLServer 具有IFNULL。您的 SQL 看起来像这样(未经测试):

SELECT patfile.Chart_Number, IFNULL(patfile.employer, addfile.name) AS e_name
FROM patfile
LEFT JOIN addfile ON patfile.employer = addfile.code

Oracle 有NVL,它的工作方式相同,但它仅限于 Oracle。最好使用COALESCE,它是ANSI 标准的一部分,并且被更多的数据库支持。

某些数据库具有 IF 函数。这也可能在 ANSI 标准中,我不确定。您可以使用它来测试非 NULL 的值,例如 ''。

SELECT patfile.Chart_Number, IF(patfile.employer = '', patfile.employer, addfile.name) AS e_name
FROM patfile
LEFT JOIN addfile ON patfile.employer = addfile.code

因此,请在您的数据库文档中查找 IFISNULLCOALESCE 之类的函数。

【讨论】:

谢谢 Bampfer。使用左连接,我接近了我正在寻找的东西。我创建了如下语句: 谢谢 Bampfer。使用左连接,我接近了我正在寻找的东西。我创建了如下语句: SELECT patfile.chart_number , addfile.name as e_name FROM patfile LEFT JOIN addfile ON patfile.employer = addfile.code 我现在唯一需要做的就是添加我的 where 语句,以便我限制特定日期的名字,它应该给我我需要的东西。【参考方案2】:
  SELECT patfile.Chart_Number
    ,  CASE WHEN patfile.employer = ''
         THEN (
            SELECT addfile.NAME AS e_name
            FROM addfile
            WHERE patfile.employer = addfile.code
            )
         ELSE patfile.employer END AS e_name
FROM patfile

【讨论】:

以上是关于如果表 A 中的值不为空,我如何从表 B 中获取值的主要内容,如果未能解决你的问题,请参考以下文章

如果 Laravel 中的值不为空,如何验证输入字段

sql减法,有时为空值

如果值不为空,如何仅在对象中添加字段? Javascript

sql union all 问题,合并两个表,相同的列如果某一行值为空,而对应的另一行值不为空

如果上一列值不为空,则更新表中的下一列

R:获取值不为空的列名