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

MySQLユニオンクエリ、2つの変数による順序

    本当に行う必要があるのは、スキーマをより慎重に検討することです。日時列に同じ名前を付けてから、次のようなクエリを実行することを検討してください- http:/ /sqlfiddle.com/#!2/a3b4c/7/0

    SELECT selection, id, datetimefoo, user FROM (
      SELECT 
        1 AS selection, 
        table1.id, table1.datetimefoo, 
        table3.user 
        FROM table1 
        LEFT OUTER JOIN table2 
        ON table1.id = table2.table1id
        LEFT OUTER JOIN table3
        ON table1.id = table3.id
    
    
      UNION
    
      SELECT 
        2 AS selection, 
        table1.id, table1.datetimefoo, 
        table3.user 
        FROM table1 
        INNER JOIN table2 
        ON table1.id = table2.table1id
        INNER JOIN table3
        ON table1.id = table3.id
    
      ) AS T2
    ORDER BY datetimefoo DESC
    

    SQLフィドルでは、これにより、探しているものに近い結果が生成されます。ただし、2番目のクエリで内部結合が必要な理由はまだわかりません。ここで必要なことは何もありません。

    これは、列名の変更を必要としないが、ソート可能な列のエイリアスを必要とする別の方法です- http://sqlfiddle.com/#!2/ec4bc/3/0

    SELECT * FROM (
      SELECT 
        1 AS selection, 
        table1.id, table1.datetimefoo AS sort_date, -- alias on first table's date
        table2.datetimebar,
        table3.user 
        FROM table1 
        LEFT OUTER JOIN table2 
        ON table1.id = table2.table1id
        LEFT OUTER JOIN table3
        ON table1.id = table3.id
    
    
      UNION
    
      SELECT 
        2 AS selection, 
        table1.id, table1.datetimefoo,
        table2.datetimebar AS sort_date, -- alias on second table's date
        table3.user 
        FROM table1 
        INNER JOIN table2 
        ON table1.id = table2.table1id
        INNER JOIN table3
        ON table1.id = table3.id
    
      ) AS T2
    ORDER BY sort_date DESC
    


    1. 文字列またはバイナリデータが切り捨てられるのをデバッグする良い方法はありますか?

    2. PHPMySqlとジオロケーション

    3. ウェブサイトデータベースを最適化する方法

    4. JavaのMySQLを使用して文字列リテラルで一重引用符をエスケープする方法