首页 > 解决方案 > 根据初始选择查询之外的列获取相关行

问题描述

我无法找到一种高效或优雅的方式在 SQL 中执行此类查询。

假设我有一张名为“People”的表,并且我知道一个人的 ID,并希望找到与该人年龄和性别相同的所有其他人。此处显示了所需的结果:

人们

PersonID    Age    Sex
       1     22      M
       2     24      F
       3     36      M
       4     22      M
       5     77      F
       6     22      F

期望的结果

PersonID    Age    Sex
       1     22      M
       4     22      M

理论上,这可以分两步完成:首先,根据 ID 查询人的性别和年龄,然后根据年龄-性别组合查询整个表:

SELECT Age, Sex FROM People WHERE PersonID = 4
SELECT * FROM People WHERE Age = <age of Person 4> AND Sex = <sex of person 4>

我目前正在read_sql使用 SQL 语法使用 python pandas 函数,因此我已经能够通过 Python 中的“后处理”事物来解决这个问题,最终不得不执行这两个查询。问题是我知道这效率不高,应该只用一个查询就可以做到。我也试图用它RIGHT JOIN来做到这一点,但没有看到正确的方法。任何提示表示赞赏。

标签: pythonsqlsql-servertsql

解决方案


一种方法是使用自联接:

SELECT p1.* 
FROM People p1 INNER JOIN people p2
ON p2.Age = p1.Age AND p2.Sex = p1.Sex
WHERE p2.PersonID = 4

推荐阅读