2016-04-22 6 views
0
ここ

このthreadの例である:私は見たことがないのでMySQLでは、この単純なネストされたSELECT節はどういう意味ですか?

select (
    select distinct Salary from Employee order by Salary Desc limit 1 offset 1 
)as second; 

select(...) as secondは私には混乱に見えるクエリセットSELECTの引数として使用することができ、列名の代わりに...

誰もこのようなネストされたselect節を理解する方法についてのアイデアを持っていますか?この機能に関するチュートリアルはありますか?

答えて

1

これは、クエリのSELECTリスト内のサブクエリです。

のは、他のいくつかの例

SELECT t.id 
    , 'bar' AS foo 
    FROM mytable 
WHERE ... 
LIMIT ... 

を見てみましょう、そこに「バー」は、クエリからの結果セットに(fooという名前の列に)すべての行に返されるリテラル単なる文字列です。

また、MySQLのは、私たちは我々はまた、クエリのSELECTリスト内のサブクエリを置くことができます句

SELECT 'fee' AS fum 

FROMせずにクエリを実行することができます。たとえば:

SELECT t.id 
    , (SELECT r.id FROM resorts r ORDER BY r.id ASC LIMIT 1) AS id 
    FROM mytable 
WHERE ... 
LIMIT ... 

あなたがについて尋ねた質問パターンが句

FROMのないSELECT文で、返されるだけの式は、サブクエリからの結果です。例えば

:このクエリが実行された場合

SELECT e.salary 
    FROM Employee e 
    GROUP BY e.salary 
    ORDER BY e.salary DESC 
    LIMIT 4,1 

、それは一つの列を返し、いずれか1または0の行を返します。これは、別のクエリのSELECTリストで使用されるサブクエリの要件を満たします。

SELECT (subquery) AS alias 

これで、外部クエリが実行されます。 FROM句はないので、MySQLは1行を返します。結果セットは、「エイリアス」という名前の1つの列で構成されます。

外部クエリによって返された各ローに対して、MySQLはSELECTリスト内でサブクエリを実行します。サブクエリが行を返す場合、サブクエリのSELECTリストの式の値は、結果セットの "エイリアス"列に割り当てられます。サブクエリの実行が行を返さない場合、MySQLは「エイリアス」列にNULLを割り当てます。

関連する問題