我的目标是在同一个id
上多次JOIN
一个表。
下面是我的数据库结构的一个片段:
+---------------+--------------+-----------------------------------------+----------+-------+-----------+-----------+---------------+
| wochenplan_id | wochentag_id | gericht | kalorien | preis | kategorie | kategorie | inhaltsstoffe |
+---------------+--------------+-----------------------------------------+----------+-------+-----------+-----------+---------------+
| 319 | 11 | Käse - Lauch - Suppe | NULL | 2.50 | NULL | NULL | g,i |
| 320 | 12 | Griechische Kartoffelpfanne | NULL | 2.60 | NULL | NULL | 10,g,i |
| 323 | 15 | Erbseneintopf | NULL | 2.60 | NULL | NULL | i |
| 324 | 21 | Erbseneintopf mit Einlage | NULL | 2.60 | NULL | NULL | 1,2,11,i |
| 325 | 22 | Erbsensuppe | NULL | 2.50 | NULL | NULL | 1,2,11,i |
| 326 | 23 | NULL | NULL | NULL | NULL | NULL | NULL |
+---------------+--------------+-----------------------------------------+----------+-------+-----------+-----------+---------------+
+--------------+-------------+
| kategorie_id | kategorie |
+--------------+-------------+
| 1 | Vegan |
| 2 | Vegetarisch |
| 3 | Geflügel |
| 4 | Rind |
| 5 | Schwein |
| 6 | Lamm |
| 7 | Wild |
| 8 | Fisch |
+--------------+-------------+
我需要从上面的表加入到kategorien
表。我已经从stackoverflow中尝试了一些解决方案,但是没有一个真正有效。
这是我到目前为止的查询:
SELECT wochenplan_id, wochentag_id, gerichte.gericht, gerichte.kalorien, preise.preis, kat1.kategorie, kat2.kategorie, gerichte.inhaltsstoffe
FROM wochenplan
LEFT JOIN gerichte ON wochenplan.gericht_id = gerichte.gericht_id
LEFT JOIN preise ON gerichte.preis_id = preise.preis_id
LEFT JOIN kategorien AS kat1 ON gerichte.kategorie_id = kat1.kategorie
LEFT JOIN kategorien AS kat2 ON gerichte.kategorie2_id = kat2.kategorie
WHERE wochenplan.kw_jahr = 102021;
我总是得到NULL
作为结果。有什么办法解决这个问题吗?
将同一个表连接两次应该没问题。
您还没有发布整个表结构,但您不应该在id列上加入分类表吗?这样的:
SELECT wochenplan_id, wochentag_id, gerichte.gericht, gerichte.kalorien, preise.preis, kat1.kategorie, kat2.kategorie, gerichte.inhaltsstoffe
FROM wochenplan
LEFT JOIN gerichte ON wochenplan.gericht_id = gerichte.gericht_id
LEFT JOIN preise ON gerichte.preis_id = preise.preis_id
LEFT JOIN kategorien AS kat1 ON gerichte.kategorie_id = kat1.kategorie_id
LEFT JOIN kategorien AS kat2 ON gerichte.kategorie2_id = kat2.kategorie_id
WHERE wochenplan.kw_jahr = 102021;