我在两个表之间有多对多的关系。我想通过与第二个表的第一个关系对第一个表进行排序,并且只从该表返回一个结果。这是在SQL Server上。我想要这样的事情:
SELECT a.retrieve_me
FROM table_A AS a
JOIN table_B AS b ON a.foo = b.foo
JOIN table_C AS c ON b.bar = c.bar
ORDER BY c.sort_me
不幸的是,它返回 MN(k)结果,其中 M 是“table_A”的计数而 N(k)是数字单行 k 与“table_C”的关系。为了让它只返回我想要的结果而不进行后期过滤,我尝试在DISTINCT
子句上使用SELECT
并使用TOP(SELECT COUNT(*) FROM table_A)
,但两者都不是有效的语法。
有什么想法吗?希望我能尽可能提高性能。
修改
为清楚起见
table A
------------
"joe" 1
"betty" 2
"george" 3
table B
------------
1 2
1 3
2 3
2 4
3 1
table C
------------
1 "ashton"
2 "harding"
3 "spring"
4 "merry lane"
我希望按照“george”,“joe”和“betty”的顺序返回结果(george - > ashton,joe - > harding,betty - > merry lane 。)
答案 0 :(得分:3)
如果我理解你需要什么,因为我觉得很难跟着你......这应该这样做:
SELECT a.nm
FROM tablea a
cross apply (select top 1 *
from tableb b
join tablec c on b.id2 = c.id
where a.id = b.id1
order by c.nm) bc
order by bc.nm