sql >> Database >  >> RDS >> Mysql

MySQL Inner Join-tabel op basis van kolomwaarde

Om alle tafelstatistieken te hebben, kunt u een UNION gebruiken, met 2 of meer selecties, één voor elke tafel:

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

Het idee van Winfred gebruiken met LEFT JOIN s. Het geeft verschillende resultaten, b.v. elk veld uit de andere tabellen wordt uitgevoerd in zijn eigen kolom (en er komen veel NULL's voor).

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. Welke unieke toets wordt geraakt met mijn insert?

  2. Gebruik @@IDENTITY om de laatst ingevoerde identiteitswaarde in SQL Server te retourneren

  3. Hoe selecteer ik datums van de laatste 30 dagen in MySQL, zelfs als de datums niet aanwezig zijn in mysql?

  4. Alle tabellen in een MySQL-database in één opdracht afkappen?