Sql 如何避免同一表中的子查询

Sql 如何避免同一表中的子查询,sql,Sql,假设我们有一个Person表,其中包含FirstName、LastName和其他一些列 FirstName | LastName |城市 ---------------------------- 约翰·怀特·纽约 亚当·怀特·斯福 凯文|怀特|洛杉矶 汤姆|洛尼|芝加哥 现在,我想检索所有姓氏与“Adam”相同的人,这是我的输入。 我不需要子查询,这意味着我不想先选择“Adam”的姓,然后再使用结果再次选择。有更有效的方法吗?您可以在LastName字段中进行自我加入: Select P2.

假设我们有一个Person表,其中包含FirstName、LastName和其他一些列

FirstName | LastName |城市
----------------------------
约翰·怀特·纽约
亚当·怀特·斯福
凯文|怀特|洛杉矶
汤姆|洛尼|芝加哥
现在,我想检索所有姓氏与“Adam”相同的人,这是我的输入。
我不需要子查询,这意味着我不想先选择“Adam”的姓,然后再使用结果再次选择。有更有效的方法吗?

您可以在
LastName
字段中进行自我加入:

Select  P2.*
From    Person  P
Join    Person  P2  On  P2.LastName = P.LastName
Where   P.FirstName = 'Adam';

您可以在
LastName
字段上进行自
JOIN

Select  P2.*
From    Person  P
Join    Person  P2  On  P2.LastName = P.LastName
Where   P.FirstName = 'Adam';

您也可以这样做:

select P2.* 
from Person P1
inner join Person P2 on P2.lastname = P1.LastName and P1.FirstName = 'adam'

您也可以这样做:

select P2.* 
from Person P1
inner join Person P2 on P2.lastname = P1.LastName and P1.FirstName = 'adam'

子查询将是最高效、最简单和最易管理的。您不想这样做有什么原因吗?您不想使用子查询吗?如果只搜索
Adam
作为输入,则必须查询数据库一次,以找出Adam的姓氏是
White
。您的意思是,而不是避免子查询,你想避免多个语句吗?@DigitalChris你是说子查询将比Etienne Faucher的连接解决方案更高效?子查询将是最高效、最简单和最易管理的。您不想这样做有什么原因吗?您不想使用子查询吗?如果只搜索
Adam
作为输入,则必须查询数据库一次,以找出Adam的姓氏是
White
。您的意思是,而不是避免子查询,你想避免多个语句吗?@DigitalChris你是说子查询将比Etienne Faucher的join解决方案更有效吗?我来晚了,只不过几秒钟!非常感谢你们,这对你们来说就像是一个1+1的问题。我来晚了,只有几秒钟!非常感谢你们,这对你们来说就像是一个1+1的问题。