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

LEFT JOINは、MySQLでNULLを与えるように期待どおりに動作しません

    思ったとおりに一致しないのは、@row_numberだと思います。 サブクエリごとに1にリセットされません。

    最初の2つ(ProfessorsとDoctors)を結合するだけでテストしましたが、CROSS JOINを使用して、すべてのrow_number値を確認できました。

    +------------+--------+------------+----------+
    | row_number | name   | row_number | name     |
    +------------+--------+------------+----------+
    |          8 | Aamina |          1 | Ashley   |
    |          8 | Aamina |          2 | Belvet   |
    |          8 | Aamina |          3 | Britney  |
    |          8 | Aamina |          4 | Maria    |
    |          8 | Aamina |          5 | Meera    |
    |          8 | Aamina |          6 | Naomi    |
    |          8 | Aamina |          7 | Priyanka |
    |          9 | Julia  |          1 | Ashley   |
    |          9 | Julia  |          2 | Belvet   |
    |          9 | Julia  |          3 | Britney  |
    |          9 | Julia  |          4 | Maria    |
    |          9 | Julia  |          5 | Meera    |
    |          9 | Julia  |          6 | Naomi    |
    |          9 | Julia  |          7 | Priyanka |
    |         10 | Priya  |          1 | Ashley   |
    |         10 | Priya  |          2 | Belvet   |
    |         10 | Priya  |          3 | Britney  |
    |         10 | Priya  |          4 | Maria    |
    |         10 | Priya  |          5 | Meera    |
    |         10 | Priya  |          6 | Naomi    |
    |         10 | Priya  |          7 | Priyanka |
    +------------+--------+------------+----------+
    

    明らかに行番号が段階的に増加しており、両方のサブクエリの初期値1は、行に番号が付けられるまでにすでに実行されていることがわかります。

    各サブクエリで個別のユーザー変数を使用することで、これを修正できる場合があります。

    ただし、このクエリは、他の職業のメンバーよりも教授の数が少ない場合など、とにかく希望どおりに機能しません。

    正直なところ、SQLではこの種の列形式のフォーマットは行いません。 4つの独立したクエリを実行し、すべての結果をアプリケーションにフェッチして、出力時に列にフォーマットするだけです。そうすれば、はるかに簡単になり、単純なコードは、記述、デバッグ、保守が容易になります。

    コメントを再確認してください:

    十分に公平なことですが、実際のプロジェクトで過度に巧妙なSQLを実行することが常に最良のアイデアであるとは限らないことをあなた(および他の読者)が知っている限り、コーディングの課題としてこれを行うことは問題ありません。

    あなたはコーディングの挑戦をしているので、あなたはそれを自分で解決するべきです、それで私はあなたに以下の出力を生み出す解決策を与えることができません。しかし、これは可能であるという証拠です(出力をモックアップしなかったことを約束します。実際に、ターミナルウィンドウからコピーして貼り付けました)。頑張ってください!

    +------------+-----------+--------+-----------+----------+
    | row_number | Professor | Doctor | Singer    | Actor    |
    +------------+-----------+--------+-----------+----------+
    |          1 | Ashley    | Aamina | Christeen | Eve      |
    |          2 | Belvet    | Julia  | Jane      | Jennifer |
    |          3 | Britney   | Priya  | Jenny     | Ketty    |
    |          4 | Maria     | NULL   | Kristeen  | Samantha |
    |          5 | Meera     | NULL   | NULL      | NULL     |
    |          6 | Naomi     | NULL   | NULL      | NULL     |
    |          7 | Priyanka  | NULL   | NULL      | NULL     |
    +------------+-----------+--------+-----------+----------+
    



    1. スキーマスイッチ-A-Roo:パート2

    2. Oracleのスキーマからテーブルのリストを削除するにはどうすればよいですか?

    3. Oracleへの接続が実行されると、セキュリティパッケージで使用できるクレデンシャルがありません

    4. 先入れ先出し価格に基づいて利益を計算する