我正在使用一堆嵌套选择,连接和外部应用来获得此结果,
╔═════╦════════╦══════════╦
║ ID ║ Name ║ RandomID ║
╠═════╬════════╬══════════╬
║ 1 ║ a ║ 3 ║
║ 2 ║ b ║ 2 ║
║ 3 ║ c ║ 1 ║
╚═════╩════════╩══════════╩
我想要的,
╔═════╦════════╦══════════╦══════════════╦
║ ID ║ Name ║ RandomID ║ Random Name ║
╠═════╬════════╬══════════╬══════════════╬
║ 1 ║ a ║ 3 ║ c ║
║ 2 ║ b ║ 2 ║ b ║
║ 3 ║ c ║ 1 ║ a ║
╚═════╩════════╩══════════╩══════════════╩
因此,如果查询原型是,
Select ID, Name, dbo.SomeFunction(@ID)
FROM (Tables + Joins)
WHERE xxx
现在我应该对具有ID和Name的表进行内部联接并从那里获取Random Name列,还是我应该如何加入上面的查询?
我想记住表现。
答案 0 :(得分:4)
您可能想要使用CTE:
with t as (
<your query here>
)
select t.id, t.name, t.randomid, trand.name as randomname
from t left join
t trand
on t.randomid = trand.id;
通过使用CTE,您无需多次重复逻辑或使用临时表。
答案 1 :(得分:3)
这样的事情对你有用:
select t1.ID
, t1.Name
, t1.RandomId
, t2.Name as RandomName
from tbl t1
join tbl t2 on t1.RandomID = t2.ID