J'ai 3 tables,SQL: comment obtenir la première condition de correspondance de ligne de l'une ou l'autre table?
Questions
|id|subject|assigned_to_id|
---------------------------
|1 |test | 1 |
|2 |test1 | NULL |
|3 |test3 | 2 |
Revues
|id|issue_id|notes|
-------------------
|1 |1 |NULL |
|2 |1 |test1|
|3 |2 |test |
Détails sur la revue
|id|journal_id|prop_key |old_value|value|
----------------------------------------------
|1 |1 |assigned_to_id|NULL |1 |
Journals
et Journal details
des tables sont utilisées pour maintenir Issue
histoire.
Si un attribut de problème est mis à jour, une entrée journal
est créée avec journal details
pour chaque attribut mis à jour. Et si seulement une note est ajoutée à issue
, seule l'entrée journal
est créée avec cette note.
Maintenant, je veux obtenir le premier enregistrement de journal pour le problème où note
est ajouté ou assigned_to_id
est modifié.
Je fais cela par join
SELECT "journals".* FROM "journals" INNER JOIN "journal_details" ON "journal_details"."journal_id" = "journals"."id" WHERE "journals"."issue_id" = 1 AND ((journals.notes != '' AND journals.notes IS NOT NULL) OR (journal_details.prop_key = 'assigned_to_id' AND journal_details.value IS NOT NULL)) ORDER BY journals.id asc
mais il ne renvoient que l'entrée journal
où notes
est présent.
|id|issue_id|notes|
-------------------
|2 |1 |test1|
J'ai essayé LEFT JOIN
et LEFT OUTER JOIN
mais même résultat.
Une idée de comment je peux y parvenir?
Quelle dbms utilisez-vous? Ne pas étiqueter les produits non impliqués ... – jarlh
J'utilise Postgresql –
si vous utilisez jointure externe et bon ordre, je suis sûr qu'il retournera toutes les lignes –