2016-07-27 5 views
0

MySQLとPostgreSQLで動作する汎用クエリを作成したいとします。MySQLとPGSQLの汎用クエリ

このクエリでは、3つのテーブルのすべての列を選択する必要がありますが、重複した行を排除するために結果にIDに明確な句が必要です。 実際にデータベースには6つのレコードがありますが、3つのレコードだけが異なります。 1つは3回表示され、もう1つは2回表示され、最後はオンになります。 多くの時間表示されるレコードはまったく同じで、それぞれを保持したいだけです。

これは、6つのレコードの絵です: 私が欲しい6 records

そして、私ということ:ここで Just distinct record

は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つだけ作成する方法が見つかりません

+3

なぜ*? table_1の値に対してtable_2で使用できる一致するレコードが複数ある場合、どの値が必要ですか? 'GROUP BY'にはANSI' GROUP BY'とANSI規則を使用します: 'SELECT'に列挙されている各列に対して、集約するか' GROUP BY'でリストします。 **あなたの実際の問題は解決しようとしていますか?** – Pred

+0

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

答えて

1

最初に最初のテーブルのIDを取得してから残りのテーブルを結合してください。

値が異なる複数のIDがあり、必要なものを指定していない場合でも、table_1の値は多少ランダムになります。

SELECT 
    table_1.*, table_2.*, table_3.* 
FROM 
    (SELECT table_1.id FROM table_1 GROUP BY table_1.id) AS distinctIds 
INNER JOIN table_1 ON table_1.id = distinctIds.id 
INNER JOIN table_2 ON distinctIds.id = table_2.table_1_id 
INNER JOIN table_3 ON table_2.table_3_id = table_3.id 
WHERE 
    table_3.type = "foo" 
+0

最初のFROMの後に "SELECT"を忘れてしまったようですが、PgSQLとMySQLで試してみましたが、良い結果が得られましたが、重複行があります –

+1

質問の下にあるコメントを参照してください。言い換えれば、重複は何を意味し、それらを削除するルールは何か。 table1.idが2回表示されるか、レコード全体が2回以上表示されますか?重複が発生したときにどのレコードを取得したいのですか?そのような抽象的な質問をするのは難しいです。 – Pred

+0

重複が1つまたは複数のジョインが1:nジョイン(またはm:n)である場合、別名が役に立たない可能性があり、psqlのこの構造がなぜサポートされているのだろうと思います。 – Jakumi

関連する問題