2017-02-01 9 views
0

このlinkでMySQLの問題が発生しました。下の答えを読んだ後(リンクにもあります)、私はまだそれを得ていませんでした。誰かが私のためのステップ、特にサブクエリ(SELECT @i := @i + 1 AS i, employee_id FROM employees)を説明できますか?前もって感謝します!従業員テーブルから偶数番号のレコードを取得します

問題:

は、employees表から偶数番号のレコードを取得します。

回答:

SET @i = 0; 

SELECT i, employee_id 

FROM (SELECT @i := @i + 1 AS i, employee_id FROM employees) a 

WHERE MOD(a.i, 2) = 0; 
+0

これは不確定な方法で '代替'レコードをフェッチします。意味のある意味では「偶数」ではありません。 – Strawberry

+0

私はこれ(何とか正式なものとして提示されている)のようなちょっとした答えは、そのサイトがこのサイトのリソースとしてなぜ落胆されているのかを部分的に説明します。 – Strawberry

答えて

2

あなたが偶数の従業員IDを取得しようとしている場合は、このすべては、上記のコードは何

SELECT employee_id FROM employees 
WHERE employee_id%2 = 0; 

がasign arbitary数字である必要はあり各従業員にこれはサブクエリの機能です

(SELECT @i := @i + 1 AS i, employee_id FROM employees) 

ゼロから始まり、各行に1ずつ増分するカウンタを使用します。しかし、@strawberryがコメントに指摘しているように、これは実際には何の目的も意味もありません。従業員IDを使用する方がいいです(従業員の大半が均等配分ではなく奇数または偶数のどちらかを持っているという状況が厳しい場合を除き)

+0

それは理にかなっています! –

+0

助けてくれてうれしいです。あなたのプロジェクトでは最高のものです。 – e4c5

1
(SELECT @i := @i + 1 AS i, employee_id FROM employees) 

これは、フェッチされた行ごとにi変数の値(ここではありませんオーダーが存在しないような任意の行であってもよい)インクリメントします。したがって、iの値はまったく意味を持ちません。

偶数番号の行を指定する場合は、番号を付ける順序が必要です。ここで昇順に従業員IDを想定しています。単一クエリでユーザ変数を使用して

は:

SELECT 
    * 
FROM 
    (SELECT 
     e.*, @rn:=IF(@rn IS NULL, 1, @rn + 1) rn 
    FROM 
     employees e 
    ORDER BY employee_id) t 
WHERE 
    rn % 2 = 0; 
+0

私はこれが質問に答えたとは思わない – Strawberry

+0

ありがとう!私はちょうど更新を見たが、それは多くの助けになる! –

関連する問題