MySQLとPostgreSQLで動作する汎用クエリを作成したいとします。MySQLとPGSQLの汎用クエリ
このクエリでは、3つのテーブルのすべての列を選択する必要がありますが、重複した行を排除するために結果にIDに明確な句が必要です。 実際にデータベースには6つのレコードがありますが、3つのレコードだけが異なります。 1つは3回表示され、もう1つは2回表示され、最後はオンになります。 多くの時間表示されるレコードはまったく同じで、それぞれを保持したいだけです。
はMySQLのクエリです:
SELECT
*
FROM
table_1
INNER JOIN table_2
ON table_1.id = table_2.table_1_id
INNER JOIN table_3
ON table_2.table_3_id = table_3.id
WHERE
table_3.type = 'foo'
GROUP BY
table_1.id
そして、これはPostgreSQLのクエリです:
SELECT DISTINCT ON (table_1.id)
*
FROM
table_1
INNER JOIN table_2
ON table_1.id = table_2.table_1.id
INNER JOIN table_3
ON table_2.table_3_id = table_3.id
WHERE
table_3.type = 'foo'
MySQLとPostgreSQLで動作するクエリを1つだけ作成する方法が見つかりません
なぜ*? table_1の値に対してtable_2で使用できる一致するレコードが複数ある場合、どの値が必要ですか? 'GROUP BY'にはANSI' GROUP BY'とANSI規則を使用します: 'SELECT'に列挙されている各列に対して、集約するか' GROUP BY'でリストします。 **あなたの実際の問題は解決しようとしていますか?** – Pred
Brut-force solution: 'select * from(select table_1。*、(table_2からidを選択してください。table_1.id = table_2.table_1.id order by (t.t2_id = table_2.id)... 'しかし、あなたが利点の大部分を失っているので、"一般的な "解決策を書こうとしないでください。各DBMS。代わりにストアド・ファンクションを作成し、最もDBMSに関連した効率的な方法でそれぞれをコーディングします。 –
Abelisto