Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1816 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Récupérer 2 valeurs et + avec deux tables(SQL Server)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer 2 valeurs et + avec deux tables(SQL Server)

n°1859658
TAM136
Posté le 10-03-2009 à 09:04:58  profilanswer
 

Bonjour à tous,
 
Je vous expose mon souci.Je cherche à appliquer la méthode ci-dessous afin de récupérer certaines valeurs
 

Code :
  1. SELECT "nom de colonne"
  2. FROM "nom de table"
  3. WHERE "nom de colonne" IN ('valeur1', 'valeur2', ...)


 
La structure est la suivante:
Table1
Colonne1
Valeur 1
Valeur 2
.........
 
 
Table 2
Colonne A
 
Si j'apllique de façon brute la méthode plus haut de la façon suivante:

Code :
  1. select distinct colonne1
  2. from table1 where colonne1  in(select distinct colonne1 from table1 a,table2 b d where id table1=id table2 and colonneA='valeur1',’valeur2’)
  3. order by colonne1


 
j'ai un message d'erreur de syntaxe à ce niveau: ','
 
Si je lance la requête suivante par contre, je n'ai aucun problème:

Code :
  1. select distinct colonne1
  2. from table1 where colonne1  in(select distinct colonne1 from table1 a,table2 b  where id table1=id table2 and colonneA='valeur1')
  3. where colonne1  in(select distinct colonne1 from table1 a,table2 b  where id table1=id table2 and colonneA='valeur2')
  4. order by colonne1


 
 
Autrement dit, il faut que je mette autant de lignes, que de valeurs à récupérer!.Merci de dire comment procéder.
 
Bonne journée.
 

mood
Publicité
Posté le 10-03-2009 à 09:04:58  profilanswer
 

n°1859888
fluminis
Posté le 10-03-2009 à 15:34:03  profilanswer
 

soit tu fais un IN(SELECT) soit des IN(val1,val2)


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1860160
TAM136
Posté le 11-03-2009 à 08:00:01  profilanswer
 

fluminis a écrit :

soit tu fais un IN(SELECT) soit des IN(val1,val2)


 
Merci mais je bloque.

n°1867806
SuppotDeSa​Tante
Aka dje69r
Posté le 31-03-2009 à 11:06:02  profilanswer
 

Salut TAM136
 
J'ai pas sql server sous la main, mais ca devrait ressembler a ca...
 
SELECT DISTINCT Colonne1
FROM Table1 INNER JOIN Table2 ON Table1.Id = Table2.Id
WHERE Table1.Colonne1 In ("valeur1","valeur2" )
ORDER BY Table1.Colonne1


---------------
Soyez malin, louez entre voisins !
n°1868066
TAM136
Posté le 01-04-2009 à 08:09:27  profilanswer
 

SuppotDeSaTante a écrit :

Salut TAM136
 
J'ai pas sql server sous la main, mais ca devrait ressembler a ca...
 
SELECT DISTINCT Colonne1
FROM Table1 INNER JOIN Table2 ON Table1.Id = Table2.Id
WHERE Table1.Colonne1 In ("valeur1","valeur2" )
ORDER BY Table1.Colonne1


 
 
Salut Dje69r
 
Merci de te pencher sur mon problème.Il y a un message d'erreur qui m'indique que valeur1 et valeur2 sont des noms de colonne incorrects.Par ailleurs, à moins de ne pas avoir été assez clair ou de ne pas comprendre la logique de ton code,on n'y voit pas apparaître colonneA ou autrement dit la colonne de Table2.Les valeurs que je veux récupérer se trouvent dans colonneA de Table2.

n°1868093
SuppotDeSa​Tante
Aka dje69r
Posté le 01-04-2009 à 09:20:06  profilanswer
 

TAM136 a écrit :


Si je lance la requête suivante par contre, je n'ai aucun problème:

Code :
  1. select distinct colonne1
  2. from table1 where colonne1  in(select distinct colonne1 from table1 a,table2 b  where id table1=id table2 and colonneA='valeur1')
  3. where colonne1  in(select distinct colonne1 from table1 a,table2 b  where id table1=id table2 and colonneA='valeur2')
  4. order by colonne1


 
 
Autrement dit, il faut que je mette autant de lignes, que de valeurs à récupérer!.Merci de dire comment procéder.
 
Bonne journée.
 


 
Pourquoi tu ne mets pas un OR alors dans ta seconde requete ? (Qui est liée a la premiere par le IN) Puisqu'en fait la, comme tu as 2 IN tu fais le lien avec deux sous requete.
Apres, les IN sont normalement remplacables par des jointures entre les tables et une clause WHERE (Ici tu as un lien entre ta table table1 et table2, puis tu filtres betement sur la valeur de la colonneA)
 
Un truc du genre :  
select distinct colonneA
from table1 where colonne1  in(select distinct colonne1 from table1 a,table2 b  where id table1=id table2 and (colonneA='valeur1' OR colonneA='valeur2'))
order by colonne1
 
Ou encore :
SELECT DISTINCT ColonneA
FROM Table1 JOIN Table2 ON Table1.Id = Table2.Id  
WHERE Table1.Colonne1 In ('valeur1','valeur2' )  
ORDER BY Table1.Colonne1
 
Le IN ici me permet de ne pas avoir de OR, genre WHERE Table1.Colonne1='Valeur1' OR Table1.Colonne1='Valeur2'

Message cité 2 fois
Message édité par SuppotDeSaTante le 01-04-2009 à 09:21:22

---------------
Soyez malin, louez entre voisins !
n°1868283
TAM136
Posté le 01-04-2009 à 14:03:34  profilanswer
 

SuppotDeSaTante a écrit :


 
Pourquoi tu ne mets pas un OR alors dans ta seconde requete ? (Qui est liée a la premiere par le IN) Puisqu'en fait la, comme tu as 2 IN tu fais le lien avec deux sous requete.
Apres, les IN sont normalement remplacables par des jointures entre les tables et une clause WHERE (Ici tu as un lien entre ta table table1 et table2, puis tu filtres betement sur la valeur de la colonneA)


 
Ce n'est pas un Or (ou) que je veux mais un And(et).Si je mets Or, la requête fonctionne mais ce n'est pas ce que je veux faire.Si je mets And,il n'y a aucun message d'erreur qui est retourné mais aucun résultat n'apparaît après exécution de la requête
 
 
[quotemsg=1868093,6,310311]
 
Un truc du genre :  
select distinct colonneA
from table1 where colonne1  in(select distinct colonne1 from table1 a,table2 b  where id table1=id table2 and (colonneA='valeur1' OR colonneA='valeur2'))
order by colonne1
[quotemsg=1868093,6,310311]
 
La requête ne fonctionne pas car dans order by, on doit y retrouver les éléments de la liste de sélection et dans tous les cas,la requête tout comme la mienne ne retourne aucun résultat si je mets bien order by colonneA
 
Enfin l'autre requête ne fonctionne pas non plus.Je regarder ça et te tiens au courant.Visiblement, je ne suis pas assez clair.

n°1868344
SuppotDeSa​Tante
Aka dje69r
Posté le 01-04-2009 à 15:28:04  profilanswer
 

Bah surtout avec ton exemple en MP je ne vois pas comment un enregistrement peut etre une chaise ET un tabouret...
Donc normal que ca ne renvoit rien. Enfin pour moi avec les infos que j'ai compris.


---------------
Soyez malin, louez entre voisins !
n°1868543
TAM136
Posté le 02-04-2009 à 07:47:15  profilanswer
 

SuppotDeSaTante a écrit :

Bah surtout avec ton exemple en MP je ne vois pas comment un enregistrement peut etre une chaise ET un tabouret...
Donc normal que ca ne renvoit rien. Enfin pour moi avec les infos que j'ai compris.


 
Ma requête initiale fonctionne: j'ai fait plusieurs tests.En effet,la chaise représente un enregistrement et le tabouret,un autre.Il doit quand mêm exister un code plus joli et surtout moins long et à écrire et à s'exécuter qu'un code avec autant de in(select..) que d'enregistrements.Sinon,tant pis.Il y a truc qui se rapproche de ce que je veux mais le problème est qu'il y a 3 tables et je n'arrive donc pas à m'en rapprocher(page 17: ceux qui ont réservé un bateau rouge et un bateau vert:
www.cs.albany.edu/~ganesh/cpsc304/SQL.pdf  
 

SuppotDeSaTante a écrit :


 
Pourquoi tu ne mets pas un OR alors dans ta seconde requete ? (Qui est liée a la premiere par le IN) Puisqu'en fait la, comme tu as 2 IN tu fais le lien avec deux sous requete.
 
Apres, les IN sont normalement remplacables par des jointures entre les tables et une clause WHERE (Ici tu as un lien entre ta table table1 et table2, puis tu filtres betement sur la valeur de la colonneA)
 
 


 
En fait  le 1er in n’a aucun intérêt. La requête devient ainsi:
 

Code :
  1. select distinct colonne1 from table1 a,table2 b  where id table1=id table2 and colonneA='valeur1'
  2. where colonne1  in(select distinct colonne1 from table1 a,table2 b  where id table1=id table2 and colonneA='valeur2')
  3. order by colonne1


 
 
Le fait qu’il y ait un ou deux in n’a, je pense, aucune incidence, puisque la jointure est faite au niveau suivant:
 
id table1=id table2
 
J’avoue ne pas trop comprendre ce paragraphe et encore moins le rapport entre la jointure et le filtre car encore une fois pour rappel, je veux filtrer sur au moins deux valeurs (valeur 1 et valeur 2 et non pas valeur 1 ou valeur 2).
[/quote]

n°1868589
SuppotDeSa​Tante
Aka dje69r
Posté le 02-04-2009 à 10:07:07  profilanswer
 

Oui je comprends bien, mais plusieurs IN comme tu les mets correspondent a un une clause WHERE avec des OR
 
En gros tu veux tous les enregistrements, id table1=id table2 ET (colonneA='valeur2' OU colonneA='valeur1' ou colonneA='valeur3')
 
Si tu mets un AND par exemple, c'est impossible a retourner, tu ne peux pas avoir un AND sur ce genre de valeur, car comme dit precedement un enregistrement ne peut pas etre a la fois une chaise ET un tabouret, c'est donc forcement un OR.  
En gros : Tu veux Chaise OU tabouret, seulement si id table1=id table2
 
De plus je ne vois pas du tout l'interet du IN, vu que le IN permet de filtrer une requete en fonction d'une autre requete.  
Mais la toi, tu as les memes tables dans chaques requetes, et qui plus est ces tables peuvent etre liées par un simple JOIN, ce qui fait que le id table1=id table2 devient superflu dans chaque IN


---------------
Soyez malin, louez entre voisins !
mood
Publicité
Posté le 02-04-2009 à 10:07:07  profilanswer
 

n°1868666
TAM136
Posté le 02-04-2009 à 12:26:12  profilanswer
 

SuppotDeSaTante a écrit :

Oui je comprends bien, mais plusieurs IN comme tu les mets correspondent a un une clause WHERE avec des OR
 
En gros tu veux tous les enregistrements, [b]Où id table1=id table2 ET (colonneA='valeur2' OU colonneA='valeur1' ou colonneA='valeur3')[/b]
 


 
Non, ce que je veux,c'est colonne A='valeur1' ET et colonne A='valeur2' ET colonne A='valeur3' ET ....
 
Dans ma requête,c'est bien le cas.Elle ne correspond à un OR!Si j'enlève id table1=id table2, la requête ne me retourne aucun résultat.
 

n°1868668
macgawel
Posté le 02-04-2009 à 12:50:44  profilanswer
 

Est-ce que tu peux nous donner un exemple plus précis avec :
- Les tables
- Le contenu des tables
- Ce que tu veux avoir
En faisant attention à ne pas donner un "cas limite"  (donc, en donnant suffisamment de contenu pour qu'on voie ce que tu veux et surtout ce que tu ne veux pas récupérer) ?
 
Parce que là, j'ai franchement du mal à comprendre la logique de ce que tu veux...

n°1868683
SuppotDeSa​Tante
Aka dje69r
Posté le 02-04-2009 à 14:03:53  profilanswer
 

Désolé TAM136, je vais aussi attendre d'avoir un peu plus d'elements sur le contenu, car  
colonne A='valeur1' ET et colonne A='valeur2' ET colonne A='valeur3' ET ....
Je ne vois pas comment ca peut etre possible, enfin si valeur1 est different de valeur2


---------------
Soyez malin, louez entre voisins !
n°1868719
TAM136
Posté le 02-04-2009 à 15:05:37  profilanswer
 

SuppotDeSaTante a écrit :

Désolé TAM136, je vais aussi attendre d'avoir un peu plus d'elements sur le contenu, car  
colonne A='valeur1' ET et colonne A='valeur2' ET colonne A='valeur3' ET ....
Je ne vois pas comment ca peut etre possible, enfin si valeur1 est different de valeur2


 
Evidemment que valeur1 est différent de valeur2: valeur1=tabouret par exemple et valeur 2=chaise.

n°1868725
SuppotDeSa​Tante
Aka dje69r
Posté le 02-04-2009 à 15:15:44  profilanswer
 

Et bien alors, pour moi, c'est impossible qu'un enregistrement puisse etre egale à tabouret ET chaise. C'est un SELECT DISTINCT et un OR.
 
Prends une liste d'un tableau Excel. Avec dedans :
Tabouret
Chaise
Chaise
Chaise
Tabouret
 
Si tu veux que tabouret et chaise n'apparaissent qu'une fois, c'est forcément un OR et un SELECT DISCTINCT.
Une cellule ne contient pas ET Chaise ET Tabouret, c'est impossible et inconcevable.
 
PS : et t'arrete de t'ennerver hein :p
 
 
edit : Je viens d'aller voir ton exemple page 17. Relis bien cette phrase sur le 2nd exemple : Replacing OR in the previous query with AND will try to retrieve boats that are both red and green in color and will always return an empty answer
Si tu dis que B1 = red AND B1 = green ca revoit rien car c'est impossible. Donc idem que pour des tabourets et des chaises.
Parcontre dans le second exemple, c'est B1 AND B2 mais ca peut pas etre B1 AND B1...
 
D'ailleurs comme dit plus haut, tes WHERE...IN a la suite, c'est exactement pareil qu'un WHERE.... OR....
 
Apres c'est un abus de langage, en Francais, comme souvent, on va dire "je veux les tabourets et les chaises, et qu'ils n'apparaissent qu'une fois", alors que c'est "ou" qu'il faudrait dire, etant donné qu'un enregistrement (ou une cellule) ne contient qu'une information et une seule (sur un champ donné), le ET a donc ici aucun sens.
/edit

Message cité 1 fois
Message édité par SuppotDeSaTante le 02-04-2009 à 15:28:37

---------------
Soyez malin, louez entre voisins !
n°1868762
macgawel
Posté le 02-04-2009 à 16:07:25  profilanswer
 

J'attends l'exemple que je tai demandé, mais pour le moment :

TAM136 a écrit :

Non, ce que je veux,c'est colonne A='valeur1' ET et colonne A='valeur2' ET colonne A='valeur3' ET ....

TAM136 a écrit :

Evidemment que valeur1 est différent de valeur2: valeur1=tabouret par exemple et valeur 2=chaise.

Tu ne récupères forcément rien, puisque :

colonne A='valeur1' ET colonne A='valeur2' ET valeur1 est différent de valeur2
=> colonne A est différent de colonne A

:pt1cable:

n°1869063
TAM136
Posté le 03-04-2009 à 07:41:37  profilanswer
 

SuppotDeSaTante a écrit :

Et bien alors, pour moi, c'est impossible qu'un enregistrement puisse etre egale à tabouret ET chaise. C'est un SELECT DISTINCT et un OR.
Prends une liste d'un tableau Excel. Avec dedans :
 
Tabouret
Chaise
Chaise
Chaise
Tabouret  
 
Si tu veux que tabouret et chaise n'apparaissent qu'une fois, c'est forcément un OR et un SELECT DISCTINCT.
Une cellule ne contient pas ET Chaise ET Tabouret, c'est impossible et inconcevable.
PS : et t'arrete de t'ennerver hein :p  
 
edit : Je viens d'aller voir ton exemple page 17. Relis bien cette phrase sur le 2nd exemple : Replacing OR in the previous query with AND will try to retrieve boats that are both red and green in color and will always return an empty answer
Si tu dis que B1 = red AND B1 = green ca revoit rien car c'est impossible. Donc idem que pour des tabourets et des chaises.
Parcontre dans le second exemple, c'est B1 AND B2 mais ca peut pas etre B1 AND B1...  
 
D'ailleurs comme dit plus haut, tes WHERE...IN a la suite, c'est exactement pareil qu'un WHERE.... OR....  
 
Apres c'est un abus de langage, en Francais, comme souvent, on va dire "je veux les tabourets et les chaises, et qu'ils n'apparaissent qu'une fois", alors que c'est "ou" qu'il faudrait dire, etant donné qu'un enregistrement (ou une cellule) ne contient qu'une information et une seule (sur un champ donné), le ET a donc ici aucun sens.
/edit

 
 

macgawel a écrit :

J'attends l'exemple que je tai demandé, mais pour le moment :


macgawel a écrit :

Tu ne récupères forcément rien, puisque :
 

colonne A='valeur1' ET colonne A='valeur2' ET valeur1 est différent de valeur2
=> colonne A est différent de colonne A

:pt1cable:

 
 
Bon, je me calme. Désolé dje. Ne le prends pas mal non plus. Je commence à comprendre mon raisonnement et en particulier mon erreur sur colonne A=valeur1=valeur2 avec valeur1<>valeur1. Je me rends compte effectivement que je me suis bien déchiré sur ce coup là!
 
Néanmoins, je vous explique la cause de cette erreur avec l’exemple suivant:
 
Table1                                  Table2
 
Colonne 1                           ColonneA
 
Salle1                                   Lit
 
Salle1                                   Tabouret
 
Salle1                                   Séchoir
 
Salle1                                   Placard
 
Salle2                                   Lit
 
Salle2                                   Pendule
 
 
 
Ce que je veux, c’est la salle qui contient un lit ET un tabouret, autrement dit la salle1 et non pas la salle qui contient un lit ou un tabouret, parce que sinon, je me retrouve avec les 2 salles puisque chacune contient un lit.
 
C’est cette histoire de Or qui m’a perturbé d’autant plus que dans le lien que j’aurais du effectivement mieux lire, les 2 solutions pour contourner cet écueil n’intègrent pas de Or!
 
Par contre, visiblement, il y a bien des lignes supplémentaires de code quand le nombre de critères de sélection augmente:
 
 

Code :
  1. SELECT S.sname
  2. FROM Sailors S, Reserves R, Boats B,
  3. WHERE S.sid = R.sid AND R.bid = B.bid AND B.color = ’Red’
  4. /*1er critère=Red*/
  5. UNION
  6. SELECT S2.sname
  7. FROM Sailors S2, Reserves R2, Boats B2,
  8. WHERE S2.sid = R2.sid AND R2.bid = B2.bid AND B2.color = ’Green’
  9. /*2nd critère=Green*/
  10. /*4 lignes de code de plus, si on inclut Union*/


 
Edit: je viens de tester avec union et la requête me retourne les 2 salles: visiblement union =+ ici.
Pour rappel, ma première requête fonctionne bien.J'ai bien l'impression que je vais devoir continuer avec ça.
 

Message cité 1 fois
Message édité par TAM136 le 03-04-2009 à 08:12:22
n°1869123
SuppotDeSa​Tante
Aka dje69r
Posté le 03-04-2009 à 10:23:36  profilanswer
 

Ok la je pige mieux.
 
La jonction entre tes tables se fait comment ? Liaison de Table1 à Table2 ou tu as une table associative ?
 
C'est genant de passer par deux requetes ?
 
Sinon tu peux aussi compter le nombre d'occurence trouver (ici Salle1 : 2 et Salle2 : 1) tu tries pas ordre decroissant et tu prends le premier, ou le max

Message cité 1 fois
Message édité par SuppotDeSaTante le 03-04-2009 à 10:56:29

---------------
Soyez malin, louez entre voisins !
n°1869132
macgawel
Posté le 03-04-2009 à 10:52:51  profilanswer
 

TAM136 a écrit :

Table1                                  Table2
 
Colonne 1                           ColonneA
Salle1                                   Lit
Salle1                                   Tabouret
Salle1                                   Séchoir
Salle1                                   Placard
Salle2                                   Lit
Salle2                                   Pendule
 
Ce que je veux, c’est la salle qui contient un lit ET un tabouret, autrement dit la salle1 et non pas la salle qui contient un lit ou un tabouret, parce que sinon, je me retrouve avec les 2 salles puisque chacune contient un lit.

Vu comment tu présentes les tables, il n'y a aucun lien entre les deux tables.
En fait, vu comment tu présentes les tables, ce n'est pas une Base de données Relationnelle. Et si elle n'est pas relationnelle, faire du SQL dessus c'est difficile  :pt1cable:  
 
Pour faire du relationnel :

Table1 = TableSalles (IdSalle, NomSalle, <autres informations sur les salles> )
(1, "Salle1", ...
 2, "Salle2", ...)

Table2 = TableMeubles (IdMeuble, NomMeuble, <autres informations sur les meubles> )
(1, "Lit", ...
 2, "Tabouret", ...)

Vu ce que tu veux faire, il y a une liaison entre les deux tables.
Pour trouver laquelle, et comment la matérialiser, il "suffit" d'étudier la cardinalité. Mais là, c'est de la conception de BDD, et si tu ne sais pas le faire il va falloir apprendre  :hello:

n°1869170
TAM136
Posté le 03-04-2009 à 12:38:00  profilanswer
 

macgawel a écrit :

Vu comment tu présentes les tables, il n'y a aucun lien entre les deux tables.
En fait, vu comment tu présentes les tables, ce n'est pas une Base de données Relationnelle. Et si elle n'est pas relationnelle, faire du SQL dessus c'est difficile  :pt1cable:  
 
Pour faire du relationnel :

Table1 = TableSalles (IdSalle, NomSalle, <autres informations sur les salles> )
(1, "Salle1", ...
 2, "Salle2", ...)

Table2 = TableMeubles (IdMeuble, NomMeuble, <autres informations sur les meubles> )
(1, "Lit", ...
 2, "Tabouret", ...)

Vu ce que tu veux faire, il y a une liaison entre les deux tables.
Pour trouver laquelle, et comment la matérialiser, il "suffit" d'étudier la cardinalité. Mais là, c'est de la conception de BDD, et si tu ne sais pas le faire il va falloir apprendre  :hello:  


 
La liaison existe.Je ne comprends pas ce que tu me dis.Les tables sont reliées par une clé sinon ma requête ne fonctionnerait pas.Si tu relis mon post depuis le début, tu verras que je parle de id Tbale 1 et id Table 2

Message cité 1 fois
Message édité par TAM136 le 03-04-2009 à 12:38:49
n°1869177
macgawel
Posté le 03-04-2009 à 12:53:10  profilanswer
 

TAM136 a écrit :

La liaison existe.Je ne comprends pas ce que tu me dis.Les tables sont reliées par une clé sinon ma requête ne fonctionnerait pas.Si tu relis mon post depuis le début, tu verras que je parle de id Tbale 1 et id Table 2

Les tables sopnt peut-être reliées par une clé, mais pour le voir, il faudrait avoir le détail des tables.
 
Et quelle est le rapport entre id_table1 et id_table2 ?
Quelle est cette clé ? Elle suit quelle(s) règle(s) ?
On en revient toujours au même problème : il faudrait que tu nous donnes une description des tables et des liens.

n°1869203
kao98
...
Posté le 03-04-2009 à 13:50:21  profilanswer
 

Hypothèse de départ (ben ouais, on est bien obligé d'émettre des hypothèses vu que tu ne nous donne pas toutes les infos dont on a besoin) :
table1 (id_table1, lib)
table2 (id_table2, id_table1, lib)
 
Echantillons :
table1 :  
1 / salle 1
2 / salle 2
 
table2 :
1 / 1 / tabouret
2 / 1 / chaise
3 / 2 / tabouret
 
résultat attendu :  
id_table1 / lib
1 / sale 1
 
requête :

Code :
  1. SELECT t1.id_table1, t1.lib
  2. FROM table1 t1 INNER JOIN table2 t2 ON t1.id_table1 = t2.id_table1
  3. WHERE t1.id_table1 IN (
  4.    SELECT id_table1
  5.    FROM table2
  6.    WHERE lib = "tabouret"
  7.       OR lib = "chaise"
  8.    GROUP BY id_table1
  9.    HAVING COUNT(id_table1) = 2
  10.    )


 
J'ai pas testé, c'est une idée, comme ça, qui me vient. A étudier !


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1870914
TAM136
Posté le 08-04-2009 à 10:34:30  profilanswer
 

SuppotDeSaTante a écrit :

Ok la je pige mieux.
 
La jonction entre tes tables se fait comment ? Liaison de Table1 à Table2 ou tu as une table associative ?
 
C'est genant de passer par deux requetes ?
 
Sinon tu peux aussi compter le nombre d'occurence trouver (ici Salle1 : 2 et Salle2 : 1) tu tries pas ordre decroissant et tu prends le premier, ou le max


 
 
Compter le nombre d'occurences?
J'essaie de comprendre
 
Si je fais  

Code :
  1. select count(bien)"nombre de biens),salle "numéro de la salle)
  2. from table1 t,table2 t2
  3. where t1.idtable1=t2.idtable2
  4. and bien='tabouret'
  5. group by salle


 
Bonjour,
 
J'ai bien le nombre de tabourets dans chacune des salles mais ça ne me donne pas le nombre de chaises...En triant, je peux connaître la salle qui contient le plus de tabourets mais ça ne répond pas à ma question.
Je suis en train de regarder pour mieux expliquer et vos donner la structure plus tard.Ceci dit,mes requêtes que j'ai bien entendu testées fonctionnent y compris cette dernière,sans être un as,loin de là,en SQL et sans vraiment comprendre le lien qui existe entre ces 2 tables si ce n'est que c'est une clé primaire ou une clé de liaison ni utiliser les informations des autres colonnes.

n°1879694
TAM136
Posté le 30-04-2009 à 13:33:33  profilanswer
 

Bonjour à tous
 
Je me permets ce up. pour ajouter puisque je ne suis pas assez clair un élément concernant la clé. C'est un peu le même principe que dans le lien que j'ai cité (sid):
www.cs.albany.edu/~ganesh/cpsc304/SQL.pdf  
 
Chaque bien est identifié par un numéro: 1,2,3.............Cette clé est la même dans la table 1 et dans la table 2.

n°1879704
macgawel
Posté le 30-04-2009 à 13:54:32  profilanswer
 

Tu pourrais plutôt donner le résultat d'un DESC matable ?
Ca te prend 2 minutes, et on aura une description fiable de tes tables...


Message édité par macgawel le 30-04-2009 à 13:54:46
n°1880418
TAM136
Posté le 04-05-2009 à 07:50:29  profilanswer
 

Bonjour,
 
Voilà quelques éléments.
 

Code :
  1. select clé primaire,salle
  2. from Table 1


 
donne
 
Clé  Salle
1   100
1   100
1   100
1   101
1   102
1   102
..........
2   100
....
 
 
Explication: dans la salle 100, on a 3 fois le bien dont l'identifiant est 1, autrement dit 3 chaises comme expliqué ci-dessous.
 
 

Code :
  1. select clé primaire,bien
  2. from Table 2


 
donne
 
Clé   Bien
1      Chaise
2      Tabouret
..................
35    Placard

Message cité 1 fois
Message édité par TAM136 le 04-05-2009 à 07:54:31
n°1880438
macgawel
Posté le 04-05-2009 à 09:39:47  profilanswer
 

TAM136 a écrit :

Code :
  1. select clé primaire,salle
  2. from Table 1


 
donne
 
Clé  Salle
1   100
1   100
1   100
1   101
1   102
1   102
..........
2   100
....

:heink:  
Une clé primaire est par définition unique.
 
En l'absence de la description des tables - qu'on te demande depuis plus d'un mois - je dirais :
Tu ne respectes pas du tout les règles des bases de données relationnelles.
=> On ne peut rien faire pour toi.

n°1880511
TAM136
Posté le 04-05-2009 à 13:01:08  profilanswer
 

macgawel a écrit :

:heink:  
Une clé primaire est par définition unique.
 
En l'absence de la description des tables - qu'on te demande depuis plus d'un mois - je dirais :
Tu ne respectes pas du tout les règles des bases de données relationnelles.
=> On ne peut rien faire pour toi.


 
La clé est bien primaire puisqu'elle identifie un seul type de bien.S'il y a plusieurs fois 1, c'est tout simplement parce qu'il y a plusieurs fois le même type de bien: 3*1 pour 3 fois une chaise par exemple.C'est tout à fait logique.Maintenant, évidemment pour faire la distinction entre chaque chaise, il y a une colonne avec un numéro. A ce propos,concernant la structure des tables, je l'ai bien donnée maintenant.Il y a bien sûr d'autres colonnes dont celle dont je viens de parler mais qui n'ont aucun intérêt pour ce que je souhaite faire.
Bien, visiblement, je ne suis pas assez clair.Tant pis.Je resterai sur ma requête même si elle est un peu lourde et pas très jolie.En tout cas, elle fonctionne sans faire appel aux autres colonnes.


Message édité par TAM136 le 04-05-2009 à 13:02:13
n°1880539
kao98
...
Posté le 04-05-2009 à 13:43:33  profilanswer
 

1 - as-tu vu mon message ?
2 - vas-tu oui ou non nous poster une vrai description de tes tables ? Si non, alors tu peux clore le sujet tout-de-suite.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1880550
macgawel
Posté le 04-05-2009 à 14:12:14  profilanswer
 

Wikipédia :

Citation :

Deux lignes distinctes de la table ne peuvent pas avoir les mêmes valeurs pour les champs définis au niveau de la clé primaire.


Je veux bien te croire quand tu dis que c'est logique. Mais ce n'est pas la logique d'une BDD Relationnelle.
 
Et non, tu n'as pas donné la structure des tables. Pour preuve, tu ne peux pas avoir, dans une BDD-R, une clé primaire qu'on retrouve plusieurs fois. (ou alors, tu n'es pas dans un système Relationnel).
 
En gros, théoriquement quand on te donne une clé primaire, tu dois pouvoir retrouver l'unique élément concerné.
Et là, si je te parle du "1" de ta Table1, tu ne peux pas me dire de quel élément il s'agit...
 
 
Par curiosité, tu utilises quel système de gestion ? Access ?

n°1883214
SuppotDeSa​Tante
Aka dje69r
Posté le 11-05-2009 à 16:43:21  profilanswer
 

Bonjour

macgawel a écrit :

Par curiosité, tu utilises quel système de gestion ? Access ?


 
Je ne comprends pas la remarque désobligeante sur Access mais c'est pas grave.
 
Maintenant je pense que :
select clé primaire,salle
from Table 1
est un exemple ecrit a la va vite, surtout aux vues de l'explication d'en dessous :
Explication: dans la salle 100, on a 3 fois le bien dont l'identifiant est 1, autrement dit 3 chaises comme expliqué ci-dessous.
Le resultat renvoit x fois la clé primaire de la table Table2 (la table des "biens" ) ce qui est normal, vu que c'est une clé secondaire de la table Table1 (ou d'une table associative Biens/Salles, peu importe).
On a la meme chaise dans 3/4/5/x salles.
Je ne vois pas le souci du relationnel.
 
Apres, si ta requete du départ fonctionne, ne te prends pas la tete, garde celle la.
Car te donner directe la requete qui repondrait à la salle qui contient un lit ET un tabouret sans avoir ni une bribe de modele ou vrai morceau de dictionnaire c'est assez chiant ;)


---------------
Soyez malin, louez entre voisins !
n°1884789
TAM136
Posté le 15-05-2009 à 07:48:12  profilanswer
 

Bonjour,
 
Si un modo passe par là,merci de locker ce topic.Les polémiques seront ainsi évitées.

n°1884814
Modération
Posté le 15-05-2009 à 09:05:34  answer
 

TAM136 a écrit :

Bonjour,
 
Si un modo passe par là,merci de locker ce topic.Les polémiques seront ainsi évitées.


Et ledit modo ne pourra que constater que ces polémiques viennent en grande partie de ta formidable incapacité à fournir des informations exhaustives et à exprimer clairement ton besoin.

n°1932052
TAM136
Posté le 15-10-2009 à 12:51:53  profilanswer
 

Bonjour,
 
Je remonte ce topic qui a été ouvert à ma demande par la modération pour apporter la solution qui m' a été donnée.
 
select distinct salle «n° de salle»
from Table 1 a,Table 2 b
where a.idTable 1=b.id Table 2
and Bien in('Chaise',Tabouret’)
group Salle
having count(distinct Bien)=2
 
 

n°1932068
kao98
...
Posté le 15-10-2009 à 14:19:37  profilanswer
 

TAM136 a écrit :

Bonjour,
 
Je remonte ce topic qui a été ouvert à ma demande par la modération pour apporter la solution qui m' a été donnée.
 
select distinct salle «n° de salle»
from Table 1 a,Table 2 b
where a.idTable 1=b.id Table 2
and Bien in('Chaise',Tabouret’)
group Salle
having count(distinct Bien)=2
 
 


 
C'est marrant, ça ressemble beaucoup à ce que j'avais posté pour t'aider. Remplace la jointure "where" par une "inner join", et c'est ce que j'avais posté :o


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Récupérer 2 valeurs et + avec deux tables(SQL Server)

 

Sujets relatifs
Help ... php+flickr : recuperer le secret code!Récupérer l'alias du destinataire lors d'une réponse avec mailto
Requête SQL complexe et éviter table temporaire[SQL SERVEUR] porbleme de concatenation
récuperer PageRank d'une Url ( batch)count =>vide + selection sur 2 tables
[Résolu]Récupérer le groupe de travail en VBSComment récupérer toute ma table SQL?
[SQL] SELECT sur une table avec clé étrangère sur cette même table 
Plus de sujets relatifs à : Récupérer 2 valeurs et + avec deux tables(SQL Server)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR