次のようなテーブルがあります。
table: Q
---------------------------
|question| scope | type |
---------------------------
| this | A | 1 |
| that | A | 1 |
| them | A | 1 |
---------------------------
| this | A | 2 |
| that | A | 2 |
| them | A | 2 |
---------------------------
| this | B | 1 |
| that | B | 1 |
| them | B | 1 |
---------------------------
スコープを指定する必要があり、各タイプから 2 つのエントリを抽出する必要があります。スコープが A の場合、考えられる解決策は次のとおりです。
---------------------------
| this | A | 1 |
| them | A | 1 |
---------------------------
| that | A | 2 |
| this | A | 2 |
---------------------------
現在、次の SQL ステートメントを使用しています。
SELECT tmp.question, tmp.type, tmp.scope
FROM Q
LEFT JOIN (
SELECT * FROM Q ORDER BY RAND( )
)tmp ON ( Q.type = tmp.type AND tmp.scope = 'A' )
GROUP BY tmp.type
ORDER BY Q.type
ただし、これはタイプごとに 1 つのエントリのみを返し、何らかの理由で NULL 行を返します。
したがって、私の質問は、ステートメントを最適化して 2 つの行を返し、NULL の行を削除する方法です。