0

我有两个表之间的多对多关系。我想按与第二个表的第一个关系对第一个表进行排序,并且只从该表返回一个结果。这是在 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”的关系数。为了让它只返回我想要的结果而不进行后过滤,我尝试DISTINCTSELECT子句上使用和使用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”的顺序返回结果(乔治->阿什顿、乔->哈丁、贝蒂->快乐车道。)

4

1 回答 1

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

于 2012-09-19T15:04:31.213 回答