Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tabela MySQL Inner Join na podstawie wartości kolumny

Aby mieć statystyki wszystkich tabel, możesz użyć UNION, z 2 lub więcej selekcjami, po jednym dla każdej tabeli:

( 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'
)
;

Wykorzystanie pomysłu Winfreda z LEFT JOIN s. Daje różne wyniki, m.in. każde pole z innych tabel jest wyprowadzane we własnej kolumnie (i występuje wiele wartości 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie powrotu karetki w komórce csv za pomocą php

  2. Jaka jest różnica między MyISAM a InnoDB?

  3. Wiele nazw hostów i wiele uprawnień?

  4. Zapytanie wyboru CodeIgnitera

  5. Maksymalne rozmiary pamięci TINYTEXT, TEXT, MEDIUMTEXT i LONGTEXT