sql >> Databasteknik >  >> RDS >> Mysql

MySQL Inner Join-tabell baserad på kolumnvärde

För att få statistik över alla tabeller kan du använda en UNION, med 2 eller fler val, en för varje tabell:

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

Använder Winfreds idé med LEFT JOIN s. Det ger olika resultat, t.ex. varje fält från de andra tabellerna matas ut i sin egen kolumn (och många NULLs förekommer).

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. Hur bibehåller man utländska nyckelbegränsningar i olika databaser?

  2. Tilldela xml som genereras av en while-loop till en variabel

  3. django.db.utils.ProgrammingError:relation finns redan

  4. Laravel 4 kan inte köra hela RAW-frågor