Sql 返回一个表中存在但另一个表中不存在的结果

Sql 返回一个表中存在但另一个表中不存在的结果,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个查询,需要返回表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

我有一个查询,需要返回表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子句。我尝试过使用左连接,但显然不起作用。我也尝试过使用工会,但没有用

任何帮助都将不胜感激

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

您需要一个
左联接
。您必须注意过滤条件:

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;

第二个表中的任何条件都需要进入条件中。只有第一个表上的条件可以放在
WHERE
子句中。

JOIN[DB2].[dbo].[table2]t2
更改为
LEFT JOIN[DB2].[dbo].[table2]t2

LEFT JOIN
返回左表(本例中为表1)中的所有内容,而不管右表(表2)中是否有匹配项