CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[SQL] à l'aide

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 15:51:51

Bonjour a tous. Sérieux je vais devenir fou, lorsque je fais

select numero, nom_ter from T natural join P
where identifiant_t = identifiantT;

j’obtient
+--------+--------------+
| numero | nom_ter |
+--------+--------------+
| 75 | Test 1 |
| 31A | Test 2 |
+--------+--------------+

Et lorsque je fait l’inverse, c’est-à-dire je remplace le « = » par « != » j’ai
+--------+--------------+
| numero | nom_ter |
+--------+--------------+
| 75 | Test 1 |
| 31A | Test 2 |
| 3 | Test3 |
| 3 | Test3 |
| 4 | Test4 |
| 4 | Test4 |
| 5 | Test5 |
| 5 | Test5 |
+--------+--------------+

Pourquoi j’ai pas simplement l’inverse de l’autre, c’est-à-dire juste Test3, Test4, et Test5 une fois chacun ?

godrik
godrik
Niveau 30
24 septembre 2009 à 16:04:08

Le resultat de ton SGBD est un peu bizarre, je ne comprends pas pourquoi tu retrouve (75, Test 1) et (31A, Test 2) dans les resultats avec !=. Il faudrait voir le contenu de la base pour comprendre.

Une jointure est equivalent a un produit cartesien et une restriction. Les "doublons" viennent de l'aspect produit cartesien de ta jointure, la condition de restriction "identifiant_t != identifiantT" ne permet pas de filtrer les doublons.

Je n'ai pas assez de donnees pour expliquer cela mieux sur ton exemple. Un livre/cours de base de donnee serait plus adapte. N'hesite pas a poser des questions plus precise.

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:11:58

je travaille avec mysql. il y-a-t-il un moyen de faire linverse du select? ça fait 2 heures que je suis dessus j'en ai marre

godrik
godrik
Niveau 30
24 septembre 2009 à 16:13:45

Je ne comprends pas ce que veux dire "l'inverse du select". Peux tu donner un exemple de ce que tu attends ?

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:14:25

je vourdrais avoir +--------+--------------+
| numero | nom_ter |
+--------+--------------+
| 3 | Test3 |
| 4 | Test4 |
| 5 | Test5 |
+--------+--------------+

godrik
godrik
Niveau 30
24 septembre 2009 à 16:16:35

mais il y a quoi dans la base ? Donnes moi tous les tuples des deux relations, sans ca, je ne peux pas comprendre comment faire...

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:17:59

create table T (Type varchar(1),numero varchar(3), nom_ter varchar(40), ville varchar(30), Dernier_rendu date, identifiantT int(3) primary key);

create table P (nom varchar(30), prenom varchar(30), identifiantP int(3) primary key);

create table Pr (identifiant_t int, foreign key (identifiant_t) references T(identifiantT), identifiant_p int, foreign key (identifiant_p) references P(identifiantP), Date date);

godrik
godrik
Niveau 30
24 septembre 2009 à 16:18:45

et les donnes qui sont dedans ?

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:20:21

mysql> select * from Territoires;

+------+--------+--------------+---------------+--
-------------+--------------+
| Type | numero | nom_ter | ville | Dernier_rendu | identifiantT |

+------+--------+--------------+---------------+--
-------------+--------------+
| P | 75 | La Bascule | Saint-Marceau | 2009-05-14 | 1 |
| P | 31A | Marcel Belot | Saint-Marceau | 2009-02-12 | 2 |
| C | 3 | Test3 | Olivet | 2009-04-02 | 3 |
| T | 4 | Test4 | Saint-pryvé | 2009-03-11 | 4 |
| T | 5 | Test5 | Saint-pryvé | 2009-09-22 | 5 |

+------+--------+--------------+---------------+--
-------------+--------------+

godrik
godrik
Niveau 30
24 septembre 2009 à 16:20:53

mmm, je crois que j'ai compris. Tu voudrais les couples (numero, nom_ter) de la table T pour lesquels le champs identifiantT n'apparait pas dans la table P.
C'est ca ?

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:22:25

je bug dans mes cop coll atten 2 min stp

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:22:54

exact

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:23:47

mysql> select * from P;
+---------+----------+--------------+
| nom | prenom | identifiantP |
+---------+----------+--------------+
| x | Aurelien | 1 |
| e | Gabriel | 2 |
| w | Olivier | 3 |
+---------+----------+--------------+
3 rows in set (0.07 sec)

mysql> select * from Pr;
+---------------+---------------+------------+
| identifiant_t | identifiant_p | Date |
+---------------+---------------+------------+
| 1 | 2 | 2009-09-21 |
| 2 | 3 | 2009-04-24 |
+---------------+---------------+------------+
2 rows in set (0.07 sec)

mysql>

godrik
godrik
Niveau 30
24 septembre 2009 à 16:27:12

SELECT numero, nom_ter FROM Territoires WHERE identifiantT NOT IN (SELECT identifiantP FROM P)

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:27:17

:stp:

godrik
godrik
Niveau 30
24 septembre 2009 à 16:28:01

":stp:"
Tu as le droit d'etre patient aussi. Je suis au boulot la...

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:28:38

excuse moi :snif2:

Pseudo supprimé
Pseudo supprimé 24 septembre 2009 à 16:36:02

Au fait, l'inverse de = c'est pas != mais <>

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:37:20

j'ai tester <> aussi

ban_pour_rien
ban_pour_rien
Niveau 7
24 septembre 2009 à 16:37:53

et cela me donne comme pour !=

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment