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

列の値に基づくMySQL内部結合テーブル

    すべてのテーブルの統計を取得するには、テーブルごとに1つずつ、2つ以上の選択を含むUNIONを使用できます。

    ( SELECT s.*
           , table1.title AS name      --or whatever field you want to show
      FROM stats s
        JOIN $tableName1 table1
          ON s.id = table1.id
      WHERE tableName = '$tableName1'
    )
    UNION ALL
    ( SELECT s.*
           , table2.name AS name      --or whatever field you want to show
      FROM stats s
        JOIN $tableName2 table2
          ON s.id = table2.id
      WHERE tableName = '$tableName2'
    )
    UNION ALL
    ( SELECT s.*
           , table3.lastname AS name      --or whatever field you want to show
      FROM stats s
        JOIN $tableName3 table3
          ON s.id = table3.id
      WHERE tableName = '$tableName3'
    )
    ;
    

    WinfredのアイデアをLEFT JOINで使用する s。さまざまな結果が得られます。他のテーブルのすべてのフィールドは、それ自体の列に出力されます(そして、多くのNULLが発生します)。

    SELECT s.*
         , table1.title      --or whatever fields you want to show
         , table2.name
         , table3.lastname   --etc
    FROM stats s
      LEFT JOIN $tableName1 table1
        ON s.id = table1.id
          AND s.tableName = '$tableName1'
      LEFT JOIN $tableName2 table2
        ON s.id = table2.id
          AND s.tableName = '$tableName2'
      LEFT JOIN $tableName3 table3
        ON s.id = table3.id
          AND s.tableName = '$tableName3'
    --this is to ensure that omited tables statistics don't appear
    WHERE s.tablename IN
       ( '$tableName1'
       , '$tableName2'
       , '$tableName3'
       )
    ;
    


    1. 複合主キーと自動インクリメント列ですが、主キーではありません

    2. 別のTransactSQLスクリプトを実行するためのTransactSQL

    3. テーブルの複数の列から個別の値をその数とともに選択する

    4. 変数データベース名