在SQL Server中,如何从另一个表的匹配*两*列中选择所有内容?

在SQL Server中,如何从另一个表的匹配*两*列中选择所有内容?,sql,sql-server,Sql,Sql Server,注意:如果你能找到一个更好的标题,请编辑它。这是一个很难用语言表达的问题 因此,假设一个包含以下列的数据表: Stuff ===== Id, Col1ThingId, Col2ThingId, 以及相关的事物表 Things ====== Id, Name, Rank, Whatever 我想检索与Col1ThingId或Col2ThingId匹配的所有内容。我可以选择具有ID的物品: SELECT Col1ThingId, Col2ThingId FROM STUFF WHERE Id

注意:如果你能找到一个更好的标题,请编辑它。这是一个很难用语言表达的问题

因此,假设一个包含以下列的数据表:

Stuff
=====
Id, Col1ThingId, Col2ThingId, 
以及相关的事物表

Things
======
Id, Name, Rank, Whatever
我想检索与Col1ThingId或Col2ThingId匹配的所有内容。我可以选择具有ID的物品:

SELECT Col1ThingId, Col2ThingId
FROM STUFF
WHERE Id = 15
这给了我这个结果:

Col1ThingId Col2ThingId
41472       41474
41510       41512
41513       41515
所以我想把这六样东西都弄到手。比如:

Select *
from Things 
where Id "is contained in either column of" {
   select Col1ThingId, Col2ThingId 
   from Stuff
   where Id  = 15
}

我想你把事情弄得比实际情况更复杂了。您可以在这里轻松地添加第二个连接谓词

select *
from Things t
join Stuff s on s.Col1ThingId = t.Id or s.Col2ThingId = t.Id
where s.Id = 15

我想你把事情弄得比实际情况更复杂了。您可以在这里轻松地添加第二个连接谓词

select *
from Things t
join Stuff s on s.Col1ThingId = t.Id or s.Col2ThingId = t.Id
where s.Id = 15

它将所有的ThingId作为一个结果,但是我如何用SELECT将其包装以获取内容?内部将该结果与Id上的内容连接。这将所有ThingId作为一个结果,但是我如何用SELECT将其包装以获取内容?内部将该结果与Id上的内容连接。是的,我的SQL最多只能起到补救作用;我还不知道如何用SQL思考。谢谢。是的,我的SQL充其量只是补救性的;我还不知道如何用SQL思考。谢谢
select *
from Stuff s
join Things t on t.id in (s.Col1ThingId, s.Col2ThingId)
where s.Id = 15