SQL : exclusion de résultats

[Fermé]
Signaler
-
 Bertrand -
Bonjour,

Je (re) débute sur Access, je dois me replonger dedans après des années sans pratiquer, et je galère sur un problème qui me paraît pourtant simple !

J'ai trois tables : cables, locaux, et une table de jonction entre les deux (relation N-N entre câbles et locaux : un câble peut traverser plusieurs locaux).

Table "Cables" :

Cable Libelle
C1 Câble 1
C2 Câble 2
C3 Câble 3
C4 Câble 4
C5 Câble 5
C6 Câble 6

Table "Locaux" :

Local Description Secteur
L1 Local 1 S1
L2 Local 2 S1
L3 Local 3 S2

Table "Jonction" :
Cable Local
C1 L1
C1 L2
C1 L3
C2 L1
C3 L2
C4 L2
C4 L3

Je voudrais une requête SQL de sélection qui m'affiche les câbles qui ne passent PAS par le local L1 (résultat : C3, C4).

Merci d'avance !




12 réponses

Messages postés
193
Date d'inscription
mardi 28 mars 2017
Statut
Membre
Dernière intervention
19 juin 2017
93
Bonjour, je pense que la requête que vous voulez est: SELECT Cable FROM Jonction WHERE Local != "L1"
Non :-( cette requête donne :

C1
C1
C3
C4
C4
Messages postés
193
Date d'inscription
mardi 28 mars 2017
Statut
Membre
Dernière intervention
19 juin 2017
93
Avez vous essayez sans les guillemet autour de L1 ?
Ah je me suis planté de forum, je travaille sur Access, SQL Server, désolé !

La requête que j'ai pour l'instant est :

SELECT Jonction.Cable
FROM Jonction
WHERE Jonction.[Local]<>"L1";

Mais elle donne comme résultat C1 C1 C3 C4 C4, pas C3 C4.
Messages postés
193
Date d'inscription
mardi 28 mars 2017
Statut
Membre
Dernière intervention
19 juin 2017
93
Avez vous essayé de changer <> par != ? Si oui alors le problème pourrait peut-être venir des crochets autour de Local.
  • Access, pas SQL Server
J'ai enlevé les [] autour de local, même résultat C1 C1 C3 C4 C4.
Par contre != au lieu de <> me met une "erreur de syntaxe..."
Messages postés
193
Date d'inscription
mardi 28 mars 2017
Statut
Membre
Dernière intervention
19 juin 2017
93
Est ce que le nombre des tables avant le nom des colonnes est obligatoire dans votre configuration ou cela vous affiche une autre "erreur de syntaxe..." ?
Non effectivment ça n'est pas obligatoire, la requête suivante donne le même résultat :

SELECT Cable
FROM Jonction
WHERE Local<>"L1";
Messages postés
16886
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2021
901
C5 et C6 sont des câbles qui ne passent PAS par le local L1.
es-tu certain d'avoir bien décrit ce que tu souhaitais?
Messages postés
16886
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2021
901
suggestion:
select distinct cable from ber_cable where cable not in (select distinct cable from ber_jonction where local='l1');
Messages postés
16886
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2021
901
ceci donne c3 et c4:
SELECT DISTINCT cable
FROM ber_jonction
WHERE 
cable not in (select distinct cable from ber_jonction where local='l1');
Messages postés
16886
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2021
901
écrit autrement:
SELECT  c.cable
FROM ber_cable c left join (select distinct cable from ber_jonction where local='l1') x
ON c.cable  = x.cable
WHERE x.cable is null;
Messages postés
16886
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2021
901
ou bien:
SELECT  distinct j.cable
FROM ber_jonction j left join (select distinct cable from ber_jonction where local='l1') x
ON j.cable  = x.cable
WHERE x.cable is null;
Merci yg, c'est exactement ce que je cherchais !!!

PS : concernant ton commentaire sur C5 et C6, bonne remarque, effectivement j'aurais dû leur mettre des locaux dans la table Jonction. Dans l'exercice grandeur nature, ça sera le cas.

Encore merci, bonne journée.