Sql 跨多个表获取值,包括MAX和NULLs

Sql 跨多个表获取值,包括MAX和NULLs,sql,tsql,sql-server-2000,join,Sql,Tsql,Sql Server 2000,Join,所以我试着解释一下数据库的设置 tbled eID | eVal1 | eVal2 ------------------------------------- 1 | Monday | Joe 2 | Tuesday | Bob 3 | Wednesday | Jan 4 | Thursday | Pete tblpaient(我意识到这不是最好的数据库设计!) tblPatientRecords pID | rID ------------ 1 | 1

所以我试着解释一下数据库的设置

tbled

eID | eVal1     | eVal2
-------------------------------------
1   | Monday    | Joe
2   | Tuesday   | Bob
3   | Wednesday | Jan
4   | Thursday  | Pete
tblpaient(我意识到这不是最好的数据库设计!)

tblPatientRecords

pID | rID
------------
1   | 1
1   | 2
2   | 3
2   | 4
rID | rVal1 | rVal2
-------------------
1   | Ok    | Boy
2   | Well  | Man
3   | Dead  | Kid
4   | Dead  | Girl
tblRecords

pID | rID
------------
1   | 1
1   | 2
2   | 3
2   | 4
rID | rVal1 | rVal2
-------------------
1   | Ok    | Boy
2   | Well  | Man
3   | Dead  | Kid
4   | Dead  | Girl
我需要的是一个查询,以收回tblAlert中的所有记录,而不管它在tblPatient中是否有相应的值。对于TBLPaient中存在的每个记录,我需要返回相关的最大rID和相关值,即

eID | eVal1     | eVal2 | pID  | pVal1   | pVal2 | rID  | rVal1  | rVal2     
-------------------------------------------------------------------------
1   | Monday    | Joe   | 1    | Monday  | 123   | 2    | Well   | Man
2   | Tuesday   | Bob   | 2    | Tuesday | 456   | 4    | Dead   | Girl
3   | Wednesday | Jan   | NULL | NULL    | NULL  | NULL | NULL   | NULL   
4   | Thursday  | Pete  | NULL | NULL    | NULL  | NULL | NULL   | NULL   

tblEDS、TBLPaient和tblRecords还有很多列,但这里没有显示。

看一下外部连接:)这些“活动”、“死亡”等本质上是什么?它们是记录类型还是实际记录?换句话说,
rValue
是否存在重复项?只需用户输入值即可。有很多列,但我只是为了方便添加了一列。可能有重复的,恐怕没有运气。列“dbo.tblPatientRecords.pID”在选择列表中无效,因为它不包含在聚合函数中,并且没有GROUP BY子句。t.rID之后需要逗号,e.eID需要是a.eID。一般来说,这是我想要的,只需要找出如何添加所有列!谢谢。好吧,好吧,你明白了。我承认:我把这件事记在脑子里了,甚至不用SSMS来检查语法。对不起。:)
SELECT
  a.eID,
  a.eValue,
  t.pID,
  t.pName,
  t.rID,
  t.rValue
FROM tblAlert a
  LEFT JOIN (
    SELECT
      p.pID,
      p.pName,
      p.eID,
      r.rID,
      r.rValue
    FROM tblPatient p
      INNER JOIN (
        SELECT pID, MAX(rID) AS rID
        FROM tblPatientRecords
        GROUP BY pID
      ) pr ON p.pID = pr.pID
      INNER JOIN tblRecords r ON pr.rID = r.rID
  ) t ON a.eID = t.eID