以下は、IDが別のテーブルの外部キーであるデータの例です(このテーブルはテストと呼ばれます)。外部キーごとに1行だけが必要な場合SELECTで行われるSQLの削減作業
+------+------+
| id | data |
+------+------+
| 1 | 100 |
| 1 | 110 |
| 1 | 105 |
| 2 | 105 |
| 2 | 150 |
| 2 | 120 |
| 2 | 320 |
| 3 | 300 |
| 3 | 400 |
| 3 | 500 |
+------+------+
(私が探しています結果を与える)私が実行したSELECTステートメントがある:それはWHERE句の条件に一致する場合
select distinct(id) from test where data < 160 and data > 130;
このクエリは、外部キーを返します。これにより、後で使用できる外部キーの固有のリストが得られます。
私の理解では、この状況ではdistinctを使用しても、実行される作業は軽減されず、すべての重複の結果セットのみがフィルタリングされます。つまり、行に一致する一意の外部キーがありますが、
| 2 | 150 |
残りの行はまだチェックされています。
特定の外部キーの一致がすでに検出されているかどうかを確認し、WHERE句を使用してデータ列をテストしていないかどうかを最初に確認するクエリを作成できますか?
使用しているデータベースをOracleまたはMySQLに決定してください。 –
'distinct()'は関数ではありません。 'distinct distinct(id)'は "適切な"構文ですが、キーワードとしての 'distinct'は'() 'にリストされているフィールドだけでなく、フィールドの全行に適用されます。そうでなければ、はい。 'where'フィルタが適用されると、以前に見つかったすべての行が検査され、現在の行が前の行のいずれかの列になるかどうかがチェックされます。 –
@ GordonLinoffいずれかの解決策は問題ありません。したがって両方のタグ。 –