MySQLで行番号(rownum)を重複しないようにクエリする方法は何ですか?
MySQLには、OracleデータベースのROWNUMのような組み込み関数は存在しないため、行番号の機能を実現することはできません。しかし、必要に応じて変数を使用して行番号をシミュレートし、重複を除去することができます。
検索結果で行番号を使用して重複を削除する方法は一般的です。
SELECT t.*
FROM (
SELECT *,
@rownum := IF(@prev_value = column_to_check, @rownum, @rownum + 1) AS row_number,
@prev_value := column_to_check
FROM your_table
CROSS JOIN (SELECT @rownum := 0, @prev_value := NULL) AS vars
ORDER BY column_to_check
) AS t
WHERE row_number = 1;
上記の例で、column_to_check を去重の基準として置き換えます。
このクエリでは、行番号を計算するために内部で変数(@rownum)が使用され、以前の行の列の値を追跡するために別の変数(@prev_value)が使用されます。各行で、現在の行の列の値が前の行の列の値と同じ場合、行番号は変わらずに維持されます。そうでない場合、行番号は1つ増加します。そして、最も外側のクエリは行番号に基づいて重複のない行をフィルタリングします。
上記の方法は、検索結果の1つの列に対してのみ重複排除が適用されます。複数列での重複排除が必要な場合は、適切な修正が必要です。