如何编写这两个(ANSI)SQL查询?

如何编写这两个(ANSI)SQL查询?,sql,Sql,我有一个包含如下数据的表: create table demo_patient_info ( attend timestamp, patient_id int, blood_pressure double ); 我希望编写ANSI SQL查询,使我能够执行以下操作: 问题1: 使用WHERE子句限制笛卡尔乘积中返回的行数,返回所有患者的血压之间的差值 问题2: 返回每个患者的血压与表中一个特定患者(即指定患者)之间的差值1 SELECT t1.patient_id

我有一个包含如下数据的表:

create table demo_patient_info (
  attend timestamp,  
  patient_id int, 
  blood_pressure double
);
我希望编写ANSI SQL查询,使我能够执行以下操作:

问题1: 使用WHERE子句限制笛卡尔乘积中返回的行数,返回所有患者的血压之间的差值

问题2: 返回每个患者的血压与表中一个特定患者(即指定患者)之间的差值

1

SELECT 
    t1.patient_id
   ,t2.patient_id
   ,t1.blood_pressure - t2.blood_pressure as bp_diff
FROM
   demo_patient_info t1
CROSS JOIN
   demo_patient_info t2
WHERE
   t1.patient_id < t2.patient_id
这可能会给每个匹配两行,这可能是好的,也可能不是好的

编辑:查询1中的t1.patient_id
ID1 ID2  diff 
1    2    1.4 
2    1    1.4 
1    1     0 
感谢乔纳森·莱夫勒的提示:

1

这可能会给每个匹配两行,这可能是好的,也可能不是好的

编辑:查询1中的t1.patient_id
ID1 ID2  diff 
1    2    1.4 
2    1    1.4 
1    1     0 

感谢Jonathan Leffler的提示:

纯SQL诗歌。我还没有试过。但如果这有意义的话,那在美学上是令人愉悦的。我不确定我是否理解。为什么每场比赛都有两行?。假设是这样的话,我可以不使用SELECT DISTINCT来确保行是唯一的吗?交叉连接应该使用一个条件进行过滤-通常是t1.patient_id