我有一个查询,我需要返回表 A 的所有实例,匹配表 B 中的特定结果集,但即使在表 B 中没有匹配项的情况下,我仍然想要表 A 中的结果,但是表 B 结果的空值。例如:
Table A
Person1 | Date1 | Info1
Person2 | Date2 | Info2
Person4 | Date4 | Info4
Table B
Person2 | Details2
Person3 | Details3
Person5 | Details5
Desired result
Person1 | Date1 | Info1 | NULL
Person2 | Date2 | Info2 | Details2
Person4 | Date4 | Info4 | NULL
目前,我的报告完成了我需要的大部分工作,但它无法恢复任何实例,例如 Person1 和 Person4。它不会带回表 2 中没有匹配结果的实例。我认为这是因为 where 子句。我试过使用 LEFT JOIN,但显然这不起作用。我也尝试过使用 UNION 但无济于事。
任何帮助,将不胜感激!
SELECT t1.[Person1]
, t1.[forename]
, t1.[surname]
,CONVERT(VARCHAR(10), t1.[aDate], 103) + ' ' + convert(VARCHAR(8), t1.[aDate], 14) Admit
,CONVERT(VARCHAR(10), t1.[disDate], 103) + ' ' + convert(VARCHAR(8), t1.[disDate], 14) Discharge
, t1.[wa]
, t1.[sp]
, t2.title
,CONVERT(VARCHAR(10), t2.DocDate, 103) + ' ' + convert(VARCHAR(8), t2.DocDate, 14) DocDate
FROM [DB1].[dbo].[table1] t1
JOIN [DB2].[dbo].[table2] t2
ON t1. Person1 = t2. Person2
WHERE CAST(t2.DocDate AS DATE) BETWEEN CAST(t1.aDate AS DATE) and
CAST(t1.disDate AS DATE)
AND t2.title like '%ischarg%'
ORDER BY t1.Person1 ASC, t1.aDate DESC
你想要一个LEFT JOIN
. 您必须注意过滤条件:
SELECT . . .
FROM [DB1].[dbo].[table1] t1 LEFT JOIN
[DB2].[dbo].[table2] t2
ON t1. Person1 = t2. Person2 AND
CAST(t2.DocDate AS DATE) BETWEEN CAST(t1.aDate AS DATE) and
CAST(t1.disDate AS DATE) AND
t2.title like '%ischarg%'
ORDER BY t1.Person1 ASC, t1.aDate DESC;
第二个表上的任何条件都需要进入ON
条件。只有第一个表上的条件才能放在WHERE
子句中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句