sql >> データベース >  >> RDS >> Mysql

MySQLの異なる列を持つテーブルでの複数の結合の結果から重複を削除する

    あなたの問題を理解しているかどうかはわかりませんが、なぜLEFT JOINを使用しているのですか?物語はより内側の結合のように聞こえます。ここではUNIONを必要とするものはありません。

    [編集]OK、あなたが今欲しいものが見えたと思います。私が提案しようとしていることを試したことがありません。さらに、一部のDBは(まだ)それをサポートしていませんが、ウィンドウ関数が必要だと思います。

    WITH Y2 AS (SELECT Y.*, ROW_NUMBER() OVER (PARTITION BY A) AS YROW FROM Y),
         Z2 AS (SELECT Z.*, ROW_NUMBER() OVER (PARTITION BY A) AS ZROW FROM Z)
    SELECT COALESCE(Y2.A,Z2.A) AS A, Y2.C, Y2.D, Z2.E, Z2.F, Z2.G
    FROM Y2 FULL OUTER JOIN Z2 ON Y2.A=Z2.A AND YROW=ZROW;
    

    アイデアは、リストをできるだけ少ない行に印刷することですよね?したがって、A1にYに10個のエントリがあり、Zに7個のエントリがある場合、ZフィールドにNULLを持つ3個の行が10個取得されます。これはPostgresで機能します。この構文がMySQLで利用できるとは思いません。

    Y:

     a | d | c  
    ---+---+----
     1 | 1 | -1
     1 | 2 | -1
     2 | 0 | -1
    

    Z:

     a | f | g | e 
    ---+---+---+---
     1 | 9 | 9 | 0
     2 | 1 | 1 | 0
     3 | 0 | 1 | 0
    

    上記のステートメントの出力:

     a | c  | d | e | f | g 
    ---+----+---+---+---+---
     1 | -1 | 1 | 0 | 9 | 9
     1 | -1 | 2 |   |   |  
     2 | -1 | 0 | 0 | 1 | 1
     3 |    |   | 0 | 0 | 1
    


    1. PostgreSQL'NOTIN'およびサブクエリ

    2. このphpエラーメッセージの背後にある意味を誰かが知っていますか?

    3. フロートの小数点以下の桁数を取得します(小数部ありまたはなし)

    4. データベースヘルパーにシングルトンを使用している場合、SQLiteデータベースを復元した後に更新/再開するにはどうすればよいですか?