Hier ist meine Tabellen Struktur:Wie kann ich einen bedingten Join machen?
// users
+------+----------+
| id | name |
+------+----------+
| 1 | Jack |
| 2 | Peter |
| 3 | Ali |
| 4 | John |
+------+----------+
posts
+----+-----------+-----------+---------------+-------------------------+
| id | author_id | editor_id | title | content |
+----+-----------+-----------+---------------+-------------------------+
| 1 | 4 | null | title1 | content1 |
| 2 | 3 | null | title2 | content2 |
| 3 | 1 | 3 | title3 | content3 |
| 4 | 3 | null | title4 | content4 |
| 5 | 2 | null | title5 | content5 |
| 6 | 2 | 1 | title6 | content6 |
+----+-----------+-----------+---------------+--------------------------+
Alles, was ich bin versucht, Namen anstelle von IDs in der posts
Tabelle zu tun ist, zu bekommen. Also hier ist meine Frage:
SELECT p.id,
p.title,
p.content,
u1.name AS author_name,
u2.name AS editor_name
FROM posts
LEFT JOIN users u1 ON p.author_id = u1.id
LEFT JOIN users u2 ON p.editor_id = u2.id
WHERE p.id = :post_id
Ok alles in Ordnung. Was ist meine Frage? Wie Sie sehen, enthält editor_id
in den meisten Fällen null
. Also brauche ich keinen Beitritt (wenn sein Wert ist null
). Ich meine Sekunde LEFT JOIN
sollte in den meisten Fällen nicht auftreten. Ich möchte also eine Bedingung wie diese vor dem zweiten Join implementieren:
Wie kann ich das tun?
Was ist Ihre Motivation dafür? Welchen Nutzen sehen Sie, den Sie bekommen? – Ray
Es ist komplizierter als das. Wenn Sie den 2. linken Join entfernen, müssen Sie den 'u2.name AS editor_name' verlieren, da Sie kein' u2' mehr haben und die Abfrage fehlschlägt – RiggsFolly
@Ray Meine Motivation ist die Vermeidung von Verschwendung. –