Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server查询同一表中的相互匹配项(2012年)_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

SQL Server查询同一表中的相互匹配项(2012年)

SQL Server查询同一表中的相互匹配项(2012年),sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我们在租户表中有一个包含以下列的表 TenantID Name address Current_Bedrooms Bedrooms_Needed Current_City City_Needed 对于给定的一行,我们如何编写一个查询来查找与其他行中当前卧室(与城市相同)匹配的所需卧室 范例 Select * from Tenants where Current_Bedrooms = Bedrooms_Needed and TenantID = 1234 听起来你想让房客互相“交换”吗? 您可

我们在租户表中有一个包含以下列的表

TenantID
Name
address
Current_Bedrooms
Bedrooms_Needed
Current_City
City_Needed
对于给定的一行,我们如何编写一个查询来查找与其他行中当前卧室(与城市相同)匹配的所需卧室

范例

Select * from Tenants where Current_Bedrooms = Bedrooms_Needed and TenantID = 1234

听起来你想让房客互相“交换”吗? 您可以将租户表与其自身(别名为
t1
t2
)合并,同时将匹配条件指定为合并条件:

Select T1.Name As TenantFrom, t2.Name AS TenantTo
from Tenants t1
INNER JOIN Tenants t2
ON t1.Bedrooms_Needed = t2.Current_Bedrooms 
AND t1.City_Needed = t2.Current_City
AND t1.TenantID <> t2.TenantID
WHERE t1.TenantID = 1234;
选择T1.名称作为租户from,t2.名称作为租户to
来自租户t1
内联租户t2
t1.需要的卧室=t2.当前的卧室
t1.City\u Needed=t2.Current\u City
和t1.TenantID t2.TenantID
其中t1.TenantID=1234;
租户id排除是为了防止租户在完全匹配的情况下进行自我匹配

编辑、重新相互匹配

为了找到相互匹配的租户对,您需要添加对等条件作为附加筛选器:

Select T1.Name As TenantFrom, t2.Name AS TenantTo
from Tenants t1
INNER JOIN Tenants t2
ON t1.Bedrooms_Needed = t2.Current_Bedrooms 
AND t1.City_Needed = t2.Current_City
AND t1.Current_Bedrooms = t2.Bedrooms_Needed
AND t1.Current_City = t2.City_Needed 
AND t1.TenantID <> t2.TenantID
WHERE t1.TenantID = 1234;
选择T1.名称作为租户from,t2.名称作为租户to
来自租户t1
内联租户t2
t1.需要的卧室=t2.当前的卧室
t1.City\u Needed=t2.Current\u City
t1.当前卧室=t2.需要卧室
t1.当前城市=t2.需要城市
和t1.TenantID t2.TenantID
其中t1.TenantID=1234;

这里有点不清楚你要干什么。您编写的查询将完全满足您的要求。然而,我想知道你是否需要一些东西来加入一个房间供应商和一个需要房间的人。为什么你有两个卧室和城市栏
beddrooms\u Needed
City\u Needed
应为查询中的参数,以便查找给定租户的相互匹配项。谢谢成功了。相互匹配如何?您只需要添加相互标准-我已经更新了。