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

null許容列でのDoctrineDQL結合

    ソリューション1:Doctrine Native SQL

    これを実現する1つの方法は、ネイティブMySQLクエリを使用することです。これには、DoctrineのネイティブSQL ResultSetMapping

    ネイティブSQLクエリを(異なるパラメーターで)2回実行すると、2番目のクエリの結果セットが最初のクエリと同じであるという問題が発生しました。GitHubの次の投稿 私のためにこれを解決しました。

    解決策2:MySQLの内部オプティマイザーを使用する

    次の結合条件を使用すると、MySQLの内部オプティマイザが使用され、これが ref_or_null 参加タイプ

    SELECT a.*, b.* 
    FROM a
       INNER JOIN b ON 
           a.column = b.column 
           OR (a.column IS NULL AND b.column IS NULL)
    

    その後、この結合条件をDQLで使用することができます。これは、SQLで適切に変換され、最適化されます。

    解決策3:カスタムDQL関数を作成する

    次の句で翻訳されたカスタムDQL関数を作成しました:

    SELECT a.*, b.* 
    FROM a
       INNER JOIN b ON (a.column <=> b.column) = 1
    

    残念ながら、= 1を取り除くことができませんでした この条項の一部。これは機能しましたが、メジャーを引き起こしました 私のクエリに対するパフォーマンスの影響:17秒対0.5秒、いくつかの(非科学的な)指標を与えるため。
    それで私はその道をさらに進んでいませんでした。




    1. PostgreSQLのUnicode文字を置き換える

    2. RMANリストバックアップコマンド

    3. 帆はmySqlに接続できません

    4. エコーを使用してPHPのURLで変数を送信する