SQL:通过与第二个表的第一个关系对表进行排序

时间:2012-09-19 14:56:24

标签: sql sql-server sql-server-2008 relational-database

我在两个表之间有多对多的关系。我想通过与第二个表的第一个关系对第一个表进行排序,并且只从该表返回一个结果。这是在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 。)

1 个答案:

答案 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

http://sqlfiddle.com/#!3/661c0/5/0