如果表 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
因此,请在您的数据库文档中查找 IF
、ISNULL
或 COALESCE
之类的函数。
【讨论】:
谢谢 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 中获取值的主要内容,如果未能解决你的问题,请参考以下文章
如果值不为空,如何仅在对象中添加字段? Javascript