j'ai une base de donnée avec des produits.
je voudrai savoir s'il est possible de faire une jointure seulement si
l'un des champs de la table produit vaut une valeur precise.
Genre j'ai des produit Rouge et d'autre Bleu.
Je voudrai faire un
SELECT * FROM produit WHERE couleur = 'Rouge'
UNION
SELECT * FROM produit
INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur =
'Bleu';
mais sans passer pas une UNION si toutefois c'est possible.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Ph. B.
Etienne a écrit :
Salut.
j'ai une base de donnée avec des produits. je voudrai savoir s'il est possible de faire une jointure seulement si l'un des champs de la table produit vaut une valeur precise.
Genre j'ai des produit Rouge et d'autre Bleu.
Je voudrai faire un SELECT * FROM produit WHERE couleur = 'Rouge' UNION SELECT * FROM produit INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur > 'Bleu';
mais sans passer pas une UNION si toutefois c'est possible.
Merci Etienne
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de données que le 1° du fait de la jointure : _1° select = colonnes de la table "produit" _2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez écrire un truc comme cela :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN ( select id from autre_table); -- Philippe.
Etienne a écrit :
Salut.
j'ai une base de donnée avec des produits.
je voudrai savoir s'il est possible de faire une jointure seulement si
l'un des champs de la table produit vaut une valeur precise.
Genre j'ai des produit Rouge et d'autre Bleu.
Je voudrai faire un
SELECT * FROM produit WHERE couleur = 'Rouge'
UNION
SELECT * FROM produit
INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur > 'Bleu';
mais sans passer pas une UNION si toutefois c'est possible.
Merci
Etienne
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de
données que le 1° du fait de la jointure :
_1° select = colonnes de la table "produit"
_2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez
écrire un truc comme cela :
SELECT * FROM produit
WHERE couleur = 'Rouge'
OR (couleur = 'Bleu'
AND
id IN ( select id from autre_table);
--
Philippe.
j'ai une base de donnée avec des produits. je voudrai savoir s'il est possible de faire une jointure seulement si l'un des champs de la table produit vaut une valeur precise.
Genre j'ai des produit Rouge et d'autre Bleu.
Je voudrai faire un SELECT * FROM produit WHERE couleur = 'Rouge' UNION SELECT * FROM produit INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur > 'Bleu';
mais sans passer pas une UNION si toutefois c'est possible.
Merci Etienne
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de données que le 1° du fait de la jointure : _1° select = colonnes de la table "produit" _2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez écrire un truc comme cela :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN ( select id from autre_table); -- Philippe.
Ph. B.
Ph. B. a écrit :
Etienne a écrit :
Salut.
j'ai une base de donnée avec des produits. je voudrai savoir s'il est possible de faire une jointure seulement si l'un des champs de la table produit vaut une valeur precise.
Genre j'ai des produit Rouge et d'autre Bleu.
Je voudrai faire un SELECT * FROM produit WHERE couleur = 'Rouge' UNION SELECT * FROM produit INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur >> 'Bleu';
mais sans passer pas une UNION si toutefois c'est possible.
Merci Etienne
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de données que le 1° du fait de la jointure : _1° select = colonnes de la table "produit" _2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez écrire un truc comme cela :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN ( select id from autre_table);
J'ai également oublié de préciser que les 2 select initiaux n'ont pas des conditions de filtre similaire (le 1° ne filtre que sur la couleur et le 2° sur la couleur et l'existence d'un id identique dans une autre table)...
Ph. B. a écrit :
Etienne a écrit :
Salut.
j'ai une base de donnée avec des produits.
je voudrai savoir s'il est possible de faire une jointure seulement si
l'un des champs de la table produit vaut une valeur precise.
Genre j'ai des produit Rouge et d'autre Bleu.
Je voudrai faire un
SELECT * FROM produit WHERE couleur = 'Rouge'
UNION
SELECT * FROM produit
INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur >> 'Bleu';
mais sans passer pas une UNION si toutefois c'est possible.
Merci
Etienne
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de
données que le 1° du fait de la jointure :
_1° select = colonnes de la table "produit"
_2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez
écrire un truc comme cela :
SELECT * FROM produit
WHERE couleur = 'Rouge'
OR (couleur = 'Bleu'
AND
id IN ( select id from autre_table);
J'ai également oublié de préciser que les 2 select initiaux n'ont pas
des conditions de filtre similaire (le 1° ne filtre que sur la couleur
et le 2° sur la couleur et l'existence d'un id identique dans une autre
table)...
j'ai une base de donnée avec des produits. je voudrai savoir s'il est possible de faire une jointure seulement si l'un des champs de la table produit vaut une valeur precise.
Genre j'ai des produit Rouge et d'autre Bleu.
Je voudrai faire un SELECT * FROM produit WHERE couleur = 'Rouge' UNION SELECT * FROM produit INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur >> 'Bleu';
mais sans passer pas une UNION si toutefois c'est possible.
Merci Etienne
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de données que le 1° du fait de la jointure : _1° select = colonnes de la table "produit" _2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez écrire un truc comme cela :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN ( select id from autre_table);
J'ai également oublié de préciser que les 2 select initiaux n'ont pas des conditions de filtre similaire (le 1° ne filtre que sur la couleur et le 2° sur la couleur et l'existence d'un id identique dans une autre table)...
Etienne
Le 29/03/2012 09:33, Ph. B. a écrit :
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de données que le 1° du fait de la jointure : _1° select = colonnes de la table "produit" _2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez écrire un truc comme cela :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN ( select id from autre_table);
oups. Non en fait il fallait lire
SELECT produit.* FROM produit WHERE couleur = 'Rouge' UNION SELECT produit.* FROM produit INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur = 'Bleu';
Etienne
Le 29/03/2012 09:33, Ph. B. a écrit :
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de
données que le 1° du fait de la jointure :
_1° select = colonnes de la table "produit"
_2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez
écrire un truc comme cela :
SELECT * FROM produit
WHERE couleur = 'Rouge'
OR (couleur = 'Bleu'
AND
id IN ( select id from autre_table);
oups.
Non en fait il fallait lire
SELECT produit.* FROM produit WHERE couleur = 'Rouge'
UNION
SELECT produit.* FROM produit
INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur =
'Bleu';
Non car le 2° select ne renvoie pas la même structure d'ensemble de données que le 1° du fait de la jointure : _1° select = colonnes de la table "produit" _2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez écrire un truc comme cela :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN ( select id from autre_table);
oups. Non en fait il fallait lire
SELECT produit.* FROM produit WHERE couleur = 'Rouge' UNION SELECT produit.* FROM produit INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur = 'Bleu';
Etienne
Etienne
Le 29/03/2012 09:37, Ph. B. a écrit :
J'ai également oublié de préciser que les 2 select initiaux n'ont pas des conditions de filtre similaire (le 1° ne filtre que sur la couleur et le 2° sur la couleur et l'existence d'un id identique dans une autre table)...
Oui mais c'est exactement ce que je veut faire !!! prendre tous les produit rouge. et le produit bleu dont il existe une jointure.
Etienne
Le 29/03/2012 09:37, Ph. B. a écrit :
J'ai également oublié de préciser que les 2 select initiaux n'ont pas
des conditions de filtre similaire (le 1° ne filtre que sur la couleur
et le 2° sur la couleur et l'existence d'un id identique dans une autre
table)...
Oui mais c'est exactement ce que je veut faire !!!
prendre tous les produit rouge.
et le produit bleu dont il existe une jointure.
J'ai également oublié de préciser que les 2 select initiaux n'ont pas des conditions de filtre similaire (le 1° ne filtre que sur la couleur et le 2° sur la couleur et l'existence d'un id identique dans une autre table)...
Oui mais c'est exactement ce que je veut faire !!! prendre tous les produit rouge. et le produit bleu dont il existe une jointure.
Etienne
Ph. B.
Etienne a écrit :
Le 29/03/2012 09:33, Ph. B. a écrit :
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de données que le 1° du fait de la jointure : _1° select = colonnes de la table "produit" _2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez écrire un truc comme cela :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN ( select id from autre_table);
oups. Non en fait il fallait lire
SELECT produit.* FROM produit WHERE couleur = 'Rouge' UNION SELECT produit.* FROM produit INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur > 'Bleu';
Etienne
Donc ma requête devrait te convenir ? sauf qu'il manque une parenthèse finale ! oups !:-(
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN (select id from autre_table)); -- Philippe.
Etienne a écrit :
Le 29/03/2012 09:33, Ph. B. a écrit :
Bonjour,
Non car le 2° select ne renvoie pas la même structure d'ensemble de
données que le 1° du fait de la jointure :
_1° select = colonnes de la table "produit"
_2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez
écrire un truc comme cela :
SELECT * FROM produit
WHERE couleur = 'Rouge'
OR (couleur = 'Bleu'
AND
id IN ( select id from autre_table);
oups.
Non en fait il fallait lire
SELECT produit.* FROM produit WHERE couleur = 'Rouge'
UNION
SELECT produit.* FROM produit
INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur > 'Bleu';
Etienne
Donc ma requête devrait te convenir ?
sauf qu'il manque une parenthèse finale ! oups !:-(
SELECT * FROM produit
WHERE couleur = 'Rouge'
OR (couleur = 'Bleu'
AND
id IN (select id from autre_table));
--
Philippe.
Non car le 2° select ne renvoie pas la même structure d'ensemble de données que le 1° du fait de la jointure : _1° select = colonnes de la table "produit" _2° select = colonnes des tables "produit" et "autre_table"
Si vous vous limitez aux colonnes de la table "produit", vous pouvez écrire un truc comme cela :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN ( select id from autre_table);
oups. Non en fait il fallait lire
SELECT produit.* FROM produit WHERE couleur = 'Rouge' UNION SELECT produit.* FROM produit INNER JOIN autre_table ON produit.id = autre_table.id WHERE couleur > 'Bleu';
Etienne
Donc ma requête devrait te convenir ? sauf qu'il manque une parenthèse finale ! oups !:-(
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN (select id from autre_table)); -- Philippe.
pif34
Le 29/03/2012 11:16, Etienne a écrit :
Le 29/03/2012 09:37, Ph. B. a écrit :
J'ai également oublié de préciser que les 2 select initiaux n'ont pas des conditions de filtre similaire (le 1° ne filtre que sur la couleur et le 2° sur la couleur et l'existence d'un id identique dans une autre table)...
Oui mais c'est exactement ce que je veut faire !!! prendre tous les produit rouge. et le produit bleu dont il existe une jointure.
Etienne
ben c'est une jointure ouverte alors, non ?
SELECT * FROM produit p left outer join autre_table at ON produit.id = autre_table.id where p.couleur = 'Rouge' or (at.id is not null and p.couleur = 'Bleu')
Le 29/03/2012 11:16, Etienne a écrit :
Le 29/03/2012 09:37, Ph. B. a écrit :
J'ai également oublié de préciser que les 2 select initiaux n'ont pas
des conditions de filtre similaire (le 1° ne filtre que sur la couleur
et le 2° sur la couleur et l'existence d'un id identique dans une autre
table)...
Oui mais c'est exactement ce que je veut faire !!!
prendre tous les produit rouge.
et le produit bleu dont il existe une jointure.
Etienne
ben c'est une jointure ouverte alors, non ?
SELECT * FROM produit p
left outer join autre_table at ON produit.id = autre_table.id
where p.couleur = 'Rouge' or (at.id is not null and p.couleur = 'Bleu')
J'ai également oublié de préciser que les 2 select initiaux n'ont pas des conditions de filtre similaire (le 1° ne filtre que sur la couleur et le 2° sur la couleur et l'existence d'un id identique dans une autre table)...
Oui mais c'est exactement ce que je veut faire !!! prendre tous les produit rouge. et le produit bleu dont il existe une jointure.
Etienne
ben c'est une jointure ouverte alors, non ?
SELECT * FROM produit p left outer join autre_table at ON produit.id = autre_table.id where p.couleur = 'Rouge' or (at.id is not null and p.couleur = 'Bleu')
pif34
Le 29/03/2012 14:14, Ph. B. a écrit :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus perfomant, et pour ce genre de chose j'avais en tete qu'il fallait préfére la jointure ouverte !?
Le 29/03/2012 14:14, Ph. B. a écrit :
SELECT * FROM produit
WHERE couleur = 'Rouge'
OR (couleur = 'Bleu'
AND
id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus
perfomant, et pour ce genre de chose j'avais en tete qu'il fallait
préfére la jointure ouverte !?
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus perfomant, et pour ce genre de chose j'avais en tete qu'il fallait préfére la jointure ouverte !?
WebShaker
Le 30/03/2012 11:11, pif34 a écrit :
SELECT * FROM produit p left outer join autre_table at ON produit.id = autre_table.id where p.couleur = 'Rouge' or (at.id is not null and p.couleur = 'Bleu')
Ah ben oui. Ca c'est pas mal !!! Merci
Etienne
Le 30/03/2012 11:11, pif34 a écrit :
SELECT * FROM produit p
left outer join autre_table at ON produit.id = autre_table.id
where p.couleur = 'Rouge' or (at.id is not null and p.couleur = 'Bleu')
SELECT * FROM produit p left outer join autre_table at ON produit.id = autre_table.id where p.couleur = 'Rouge' or (at.id is not null and p.couleur = 'Bleu')
Ah ben oui. Ca c'est pas mal !!! Merci
Etienne
WebShaker
Le 30/03/2012 11:12, pif34 a écrit :
Le 29/03/2012 14:14, Ph. B. a écrit :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus perfomant, et pour ce genre de chose j'avais en tete qu'il fallait préfére la jointure ouverte !?
Ben je vais tester les deux solutions. La plus rapide sera la mieux !
J'ai quelques doute sur le IN qui ne m'a jamais semblé bien véloce avec PostgreSQL.
Merci.
Le 30/03/2012 11:12, pif34 a écrit :
Le 29/03/2012 14:14, Ph. B. a écrit :
SELECT * FROM produit
WHERE couleur = 'Rouge'
OR (couleur = 'Bleu'
AND
id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus
perfomant, et pour ce genre de chose j'avais en tete qu'il fallait
préfére la jointure ouverte !?
Ben je vais tester les deux solutions.
La plus rapide sera la mieux !
J'ai quelques doute sur le IN qui ne m'a jamais semblé bien véloce avec
PostgreSQL.
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus perfomant, et pour ce genre de chose j'avais en tete qu'il fallait préfére la jointure ouverte !?
Ben je vais tester les deux solutions. La plus rapide sera la mieux !
J'ai quelques doute sur le IN qui ne m'a jamais semblé bien véloce avec PostgreSQL.
Merci.
Ph. B.
pif34 a écrit :
Le 29/03/2012 14:14, Ph. B. a écrit :
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus perfomant, et pour ce genre de chose j'avais en tete qu'il fallait préfére la jointure ouverte !?
Vous avez raison. :-)
-- Philippe.
pif34 a écrit :
Le 29/03/2012 14:14, Ph. B. a écrit :
SELECT * FROM produit
WHERE couleur = 'Rouge'
OR (couleur = 'Bleu'
AND
id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus
perfomant, et pour ce genre de chose j'avais en tete qu'il fallait
préfére la jointure ouverte !?
SELECT * FROM produit WHERE couleur = 'Rouge' OR (couleur = 'Bleu' AND id IN (select id from autre_table));
dépend de la bd, mais en général sous oracle le exist est plus perfomant, et pour ce genre de chose j'avais en tete qu'il fallait préfére la jointure ouverte !?