2009-04-17 25 views
4

Ich habe zwei MySql-Tabellen, eine mit Lebensmitteln und eine mit Rezepten (Gruppen von Lebensmitteln). Die Rezept-Tabelle hat einen Titel und dann eine Item-Tabelle, die alle Lebensmittel in diesem Rezept enthält. Dieser Tisch ist mit dem Essenstisch verbunden. Jetzt muss ich diese Tabellen kombinieren und zusammen auflisten.MySql Abfrage, kombinieren Tabellen

Lebensmittel-Tabelle:

 
foodid | title | calories 
    1  banana  100 
    2  apple  50 

Rezept-Tabelle:

 
recipeid | title 
    1  fruit-mix

Receipe-item-Tabelle:

 
receipeitemid | recipeid | foodid 
    1    1   1 
    2    1   2 

Ich muss sie eine Liste kombinieren sowohl Lebensmittel, die und Rezepte in derselben Liste. Also im obigen Beispiel würde ich eine Liste wie diese benötigen:

 
title | foodid | recipeid | calories 
banana  1  null  100 
apple  2  null  50 
fruit-mix null  1  150

Ist dies in jedem Fall möglich?

+0

Gibt es einen bestimmten Grund, warum Sie beide auf einmal auflisten möchten? – Powerlord

Antwort

6

Sie verwenden eine Sache UNION

Das Problem mit Vereinigung genannt ist, dass alle Tabellen die gleichen Felder haben müssen. Sie können jedoch gefälschte Felder in der SELECT-Abfrage hinzufügen, um das gewünschte Ergebnis zu erhalten. Und es kann mit großen Tabellen langsam sein.

SELECT title, foodid, NULL as recipeid, calories FROM Food-table 
UNION 
SELECT title, NULL as foodid, recipeid, calories FROM Recipe-table 

Aber Sie sollten wirklich in JOINS aussehen, da Sie einen Link Tabelle dort haben.

4
SELECT title, foodid, null, calories 
FROM Food 

UNION 

SELECT r.title, null, r.recipeid, sum(calories) 
FROM recipe r 
INNER JOIN RecipeItem ri ON ri.recipeid=r.recipeid 
INNER JOIN Food f ON f.foodid=ri.foodid 
GROUP BY r.title, r.recipeid