gpt4 book ai didi

sql-server - INNER JOIN 子句忽略 NULL 值

转载 作者:行者123 更新时间:2023-12-04 00:07:43 26 4
gpt4 key购买 nike

我希望查询一些与患者开具的属于特定类别的药物有关的数据。但我也想展示没有任何药物的患者。到目前为止我的查询:

    SELECT
pd.fname,
pd.lname,
pp.drug_name,
pp.drug_strength
FROM
patient_data pd
FULL OUTER JOIN patient_prescr pp on pp.pid = pd.pid
FULL OUTER JOIN formulary f on pp.med_id = f.id
INNER JOIN formulary_categories fc on f.category = fc.id AND fc.id in (34,36,37,38,5)
WHERE
pd.lname = 'Test'

当将 INNER JOIN 应用到 formulary_categories 时,我可以正确指定我想要指定的药物的类别,但是当我这样做时,它不会包括没有任何药物的患者。

使用 INNER JOIN 加入公式类别表,我的结果如下所示:

-----------------------------------------------------------------------
fname | lname | drug_name | drug_strength
-----------------------------------------------------------------------
Cathy Test Clonazepam 0.5mg
Larry Test Librium 25mg
Jennifer Test Vistrail 25mg
-----------------------------------------------------------------------

如果我将 INNER JOIN 更改为 FULL OUTER JOIN,它会简单地忽略 category 约束,并拉取所有类别。

但是,查询将不包括没有任何处方药的患者。我希望我的结果看起来像:

-----------------------------------------------------------------------
fname | lname | drug_name | drug_strength
-----------------------------------------------------------------------
Cathy Test Clonazepam 0.5mg
Larry Test Librium 25mg
Joe Test NULL NULL
Jennifer Test Vistrail 25mg
Steve Test NULL NULL
-----------------------------------------------------------------------

最佳答案

您实际上是在寻找 LEFT JOIN:

SELECT
pd.fname,
pd.lname,
pp.drug_name,
pp.drug_strength
FROM
patient_data pd
FULL OUTER JOIN patient_prescr pp on pp.pid = pd.pid
FULL OUTER JOIN formulary f on pp.med_id = f.id
LEFT JOIN formulary_categories fc on f.category = fc.id
AND fc.id in (34,36,37,38,5)
WHERE
pd.lname = 'Test'

如果两个表(或结果集)中的值之间没有相关性,LEFT JOIN 将不会过滤数据,并且将显示一个 NULL 值显示表中未找到相关性的数据的列(就像在您预期的输出样本中一样)。

您还可以查看了解所有类型 JOIN 的最佳文章(我认为),here .

关于sql-server - INNER JOIN 子句忽略 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30712682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com