2012-02-29 8 views
0

これは有効なSQLですか?はいの場合、それが何をしているか教えていただけますか?ORDER BYの副選択?有効なSQLは?

Select * 
from MyFirstTable 
order by (select min(somefield) 
    from MySecondTable 
    where MyFirstTable.id = MySecondTable.id) 

「順序付け」の副選択は、どのように可能ですか?実際には、このSQLクエリはフィールドでソートされるのではなく、フィールドの行のある値(min)でソートされます。それは論理的なので、フィールド名以外の他のもので並べ替えることはできません。しかし分(somefield)<> somefield!しかし、はい、このクエリが動作し、私を教える職場の誰かが私にこう言ってくれました。私は懐疑的です。 これはどういう意味ですか?または、同類のクエリを投稿するだけですか?

ありがとうございます!

答えて

1

このクエリは、のMySecondTableに格納されているsomefieldの最小値で、idを指定します。ここで

は簡単な例です:上記の場合

MyFirstTable 
id 
1 
2 
3 

MySecondTable 
id somefield 
1  2 
1  4 
2  1 
3  6 
3  4 

、あなたのクエリが

id 
2 
1 
3 
0

より多くの意味を行うことができる同等のクエリを返します:

SELECT MyFirstTable.ID, MyFirstTable.A, MyFirstTable.B 
FROM MyFirstTable 
INNER JOIN MySecondTable ON MyFirstTable.ID = MySecondTable.ID 
GROUP BY MyFirstTable.ID, MyFirstTable.A, MyFirstTable.B 
ORDER BY MIN(MySecondTable.SomeField) 
関連する問題