SQL有条件地选择行

SQL有条件地选择行,sql,Sql,我想知道是否可以在SQL中执行以下操作 假设你有三张桌子。 字段Id是贯穿所有数据库的关系键 Table1 - PK Id, .... Table2 - PK Id, T3FK, TimeStamp,.... Table3 - PK Id, identity, Status, .... Table1.id (1 to *) Table 2.id Table1.id (1 to *) Table 3.id Table2.id+Table2.T3FK (1 to *) Table3.Id+Tab

我想知道是否可以在SQL中执行以下操作

假设你有三张桌子。 字段Id是贯穿所有数据库的关系键

Table1 - PK Id, .... 
Table2 - PK Id, T3FK, TimeStamp,....
Table3 - PK Id, identity, Status, ....

Table1.id (1 to *) Table 2.id
Table1.id (1 to *) Table 3.id
Table2.id+Table2.T3FK (1 to *) Table3.Id+Table3.identity
我正在尝试合并以下select语句:

SELECT T1.*, T2.* 
  FROM Table1 T1
  JOIN Table2 T2 ON T1.Id = T2.Id
  JOIN Table3 T3 on T1.Id = T3.Id
 WHERE T3.Status = 'A' 
   AND T2.P3Fk = T3.identity 
   AND T1.id IN (SELECT Id 
                   FROM ListOfIds)
……和:

SELECT T1.*, T2.* 
  FROM Table1 T1
  JOIN Table2 T2 ON T1.id = T2.id
  JOIN (SELECT id, MAX(TimeStamp) as TimeStamp 
          FROM Table2 
      GROUP BY id) t2a ON t2.id = t2a.id 
                      AND t2.TimeStamp = t2a.TimeStamp
 WHERE t1.Id IN (SELECT Id 
                   FROM ListOfIds)
所以基本上我要做的是让一个select语句返回 T2
中的行,其中T2.P3FK=T3.identity和T3.status='A'
如果不存在,则
返回T2中具有最新时间戳的行。我需要对id列表执行此操作,而不仅仅是一个id。

我很难理解这个问题,但是如果需要返回不同的数据,可以将CASE语句放入SQL(取决于数据库),根据条件返回不同的字段


您可能需要根据数据库查找精确的详细信息。

最简单的方法可能是修改T2和T3的联接,并将联接添加到t2a,然后使用case或coalesce从T2合并所有需要的字段

SELECT T1.*, 
   COALESCE(T2.id,t2a.id) id,
   COALESCE(...
  FROM Table1 T1
  LEFT JOIN (Table2 T2
     INNER JOIN Table3 T3 on T1.Id = T3.Id
             and  T3.status = 'A' )
   ON T1.Id = T2.Id
  INNER JOIN (SELECT id, MAX(TimeStamp) as TimeStamp 
          FROM Table2 
      GROUP BY id) t2a ON t2.id = t2a.id 
                      AND t2.TimeStamp = t2a.TimeStamp
 WHERE t1.Id IN (SELECT Id 
                   FROM ListOfIds)

谢谢康拉德!我用了你说的话,效果很好。我感谢你的帮助。我需要一个15的声望来提高投票率,但当我得到它的时候我会的。thanks@crsavage0630很高兴我能帮忙。既然你提到了,你可能想看看Meta,而不是我在游说你接受我的答案;)