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

残された参加は可換ですか?その特性は何ですか?

    ウィキペディア:

    「数学では、オペランドの順序を変更しても結果が変わらない場合、二項演算は可換です。これは多くの二項演算の基本的な特性であり、多くの数学的な証明がそれに依存しています。」

    回答:

    いいえ、左結合は可換ではありません。そして、内部結合はです。

    しかし、それは実際にはあなたが求めていることではありません。

    次のクエリですか:

    TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD
    

    (すべてid列に結合されています)次と同等です:

    TableA INNER JOIN TableB
           INNER JOIN TableC
            LEFT JOIN TableD   
    UNION     
    TableA INNER JOIN TableB
            LEFT JOIN TableC ON TableB.c_id IS NULL
            LEFT JOIN TableD    
    

    回答:

    また、いいえ。一般的に言って、ユニオンとジョインは実際には同じことを達成しません。場合によっては、それらを同等に記述できるかもしれませんが、私はあなたが示しているそれほど一般的な疑似SQLではないと思います。 ON構成は機能しないようです(MySQLではわからないことがあるかもしれません)

    これは、同等だと思う単純化された一連のクエリです。

    SELECT * 
      FROM TableA a 
           LEFT JOIN 
           TableB b ON a.id = b.id_a 
    
    SELECT * 
      FROM TableA a 
           INNER JOIN 
           TableB b ON a.id = b.id_a 
    UNION      
    SELECT * 
      FROM TableA a  
           LEFT JOIN 
           TableB b ON a.id = b.id_a 
     WHERE TableB.id IS NULL
    

    編集2:

    これはあなたに近いが本質的に同じである別の例です。

    SELECT * 
      FROM            TableA a 
           INNER JOIN TableB b ON a.id = b.id_a 
            LEFT JOIN TableC c ON b.id = c.id_b 
    

    と同じです

    SELECT * 
      FROM TableA a 
           INNER JOIN TableB b ON a.id = b.id_a 
           INNER JOIN TableC c ON b.id = c.id_b 
    UNION      
    SELECT * 
      FROM TableA a  
           INNER JOIN TableB b ON a.id = b.id_a 
            LEFT JOIN TableC c ON b.id = c.id_b 
     WHERE TableC.id IS NULL
    

    しかし、私はまだ 私があなたの本当の質問に答えているとは思わないでください。




    1. mysqlの列で許可される最大長を決定します

    2. 点群を初期化できません-ORA-13249:dmlトリガーの作成中にエラーが発生しました

    3. mysqlselectはvarcharフィールドを起動しません

    4. SelectステートメントでSum、Avg、Countを使用する方法-SQL Server/TSQLチュートリアルパート128