![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
cavo789
tous commettaient l'erreur du AND jusqu'au moment ou, oui, ils ont commencé à traduire en opérateur OR.
Reprenons la formulation initiale de persia :
«Je souhaite afficher quels auteurs ont travaillé chez 'maisonculture' et 'centrejeunesse'.»
Si l’on vous suit, on aurait tendance à reformuler la chose ainsi :
Je souhaite afficher quels auteurs ont travaillé chez 'maisonculture' ou 'centrejeunesse'.
Ce qui évidemment n’est pas le but de la manœuvre.
Quand persia code :
WHERE ... Author.lieu='maisonculture' AND Author.lieu='centrejeunesse' ;
Il demande au système de rechercher dans la table Author chaque ligne vérifiant une double condition qui ne peut être satisfaite que dans un univers quantique, façon chat de Schrödinger.
En réalité, persia doit demander au système de réaliser un ensemble d'opérations que l'on peut décrire ainsi :
1) Produire un 1er ensemble E1, dont les éléments sont les auteurs pour lesquels, dans la table Author, la condition Author.lieu='maisonculture' est vérifiée,
2) Produire un 2e ensemble E2, dont les éléments sont les auteurs pour lesquels, dans la table Author, la condition Author.lieu='centrejeunesse' est vérifiée,
3) Au final, produire un ensemble E3 dont les éléments appartiennent à la fois à E1 et E2. Il s'agit donc d'une intersection.
=> Ainsi, la bonne formulation est celle de SQLpro.
Je rappelle ce que dit la théorie relationnelle :
Soit a et b deux relations de même type.
L’intersection de ces relations, a INTERSECT b, est une relation du même type, dont le corps est constitué de tous les tuples t tels que t apparaît à la fois dans a ET dans b.
L’union de ces relations, a UNION b, est une relation du même type, dont le corps est constitué de tous les tuples t tels que t apparaît dans a OU b ou les deux.
(Traduisez relation par valeur de table et tuple par ligne).
Partager