J'ai une jointure sur deux tables définies comme une jointure externe gauche de sorte que tous les enregistrements soient renvoyés depuis la table de gauche même s'ils n'ont pas d'enregistrement dans la table de droite. Cependant, j'ai également besoin d'inclure une clause where sur un champ de la table de droite, mais ... Je veux toujours qu'une ligne de la table de gauche soit retournée pour chaque enregistrement dans le tableau de gauche même si le condition dans la clause where n'est pas remplie. Y-a-t'il une façon de le faire?Left Outer join et une clause supplémentaire where
Répondre
Oui, mettre la condition (appelé un prédicat) dans les conditions de jointure
Select [stuff]
From TableA a
Left Join TableB b
On b.Pk = a.Pk
-- [Put your condition here, like this]
And b.Column = somevalue
Vous avez juste besoin de mettre le prédicat dans la condition JOIN
. Le mettre dans la clause WHERE
convertirait effectivement votre requête en une jointure interne.
Par exemple:
...
From a
Left Join b on a.id = b.id and b.condition = 'x'
SELECT x.fieldA, y.fieldB
FROM x
LEFT OUTER JOIN (select fieldb, fieldc from Y where condition = some_condition)
ON x.fieldc = y.fieldc
select *
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where t1.some_field = nvl(t2.some_field, t1.some_field)
UPD: errr ... non. de cette façon:
select *
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where some_required_value = nvl(t2.some_field, some_required_value)
nvl
est une syntaxe Oracle qui remplace le premier argument de seconde dans le cas où il est null
(ce qui est courant pour les jointures externes). Vous pouvez utiliser ifnull
ou coalesce
pour d'autres bases de données.
Ainsi, vous comparez t2.some_field
avec vos critères de recherche si elle a rencontré prédicat de jointure, mais si elle n'a pas, alors vous revenir Ramer de table1
, parce que some_required_value
par rapport à lui-même sera toujours vrai (à moins qu'il soit null
, mais - null = null
rendements null
, ni true
pas false
Vous pouvez utiliser
WHERE (right_table.column=value OR right_table.column IS NULL)
Ceci renverra toutes les lignes du tableau 1 et le tableau 2, mais seulement WHE. re table 1 n'a pas de ligne correspondante dans le tableau 2 ou la ligne correspondante dans le tableau 2 correspond à vos critères.
- 1. LEFT OUTER JOIN avec une clause WHERE
- 2. SQL - LEFT OUTER JOIN et la clause WHERE
- 3. ajouter une clause where à un T-sql LEFT OUTER JOIN requête
- 4. Collection NHibernate Left Left Outer Join Issue d'où
- 5. Comment pouvons-nous différer LEFT OUTER JOIN vs Left Join
- 6. JPA imbriqué Sélectionnez Left Outer Join
- 7. LINQ to SQL Left Outer Join
- 8. Linq to Entities - left Outer Join
- 9. Linq to Entity Left Outer Join
- 10. requête MySQL avec LEFT OUTER JOIN et OÙ
- 11. ONE TO ONE LEFT OUTER JOIN
- 12. NHibernate Left Outer Join Sous-classe
- 13. LINQ Join (Left Outer) avec Take (1)
- 14. LINQ Join Where Clause
- 15. requête SQL alternative/optimisation pour LEFT OUTER JOIN
- 16. Left outer Rejoindre LINQ
- 17. Linq to Entities Left Outer Join/Sous-requête?
- 18. Count() en utilisant la clause Where et Left Rejoignez
- 19. Conversion de requêtes SQL vers LINQ Left Outer Join (VB.NET)
- 20. Aide avec un WHERE sur une requête SQL LEFT JOIN
- 21. LEFT OUTER JOIN avec des définitions supplémentaires dans Django
- 22. MYSQL: COUNT avec GROUP BY, LEFT JOIN et la clause WHERE ne renvoie pas de valeurs
- 23. Utilisation d'instructions CASE dans LEFT OUTER JOIN dans SQL
- 24. MySQL - LEFT JOIN et COUNT()
- 25. gauche Devenez membre et clause Where
- 26. MySQL LEFT JOIN erreur
- 27. Linq, Left Join et Dates
- 28. Clause WHERE provoquant l'omission de la règle LEFT JOIN par la table
- 29. 3 jointures et clause where ensemble
- 30. comment ajouter une colonne dans SQL Query incl. LEFT OUTER JOIN
Cela ne fonctionne pas sur ECC6 –