2009-02-19 6 views
0

Je suis nouveau dans SQL et SGBD relationnel. Je souhaite récupérer des enregistrements d'une base de données relationnelle s'ils satisfont 3 propriétés données.Comment: MySQL Comment récupérer un enregistrement basé sur trois propriétés?

Par exemple, s'il y a une table contenant les informations sur les solides:

table_solid : |s_id|s_name|description| 
table_width : |w_id|w_name| 
table_height: |h_id|h_name| 
table_length: |l_id|l_name| 

où * _id sont toutes les clés primaires.

J'ai 3 autres tables pour relier ces tables avec Foreign Keys.

table_s_h: |s_id|h_id| 
table_s_w: |s_id|w_id| 
table_s_l: |s_id|l_id| 

Pourriez-vous m'expliquer comment je rejoins ceux-ci.

Merci d'avance. Table_length contient des longueurs valides que le solide peut prendre (et de la même manière avec d'autres tables).

+0

Que ces tableaux décrivent-ils? Leur structure et les noms de leurs champs ne sont pas très clairs. –

+0

Je pense que vous feriez mieux d'utiliser une table avec 5 ou 6 colonnes. Les 5 colonnes seraient 's_name', 'description', 'w_name', 'l_name' et 'h_name'; le sixième pourrait être un identifiant pour l'objet. Vous semblez avoir surnormalisé et rencontrer des problèmes en conséquence. –

Répondre

2

A partir d'une seule table:

Select * 
FROM TABLE_NAME 
WHERE table_width = SOME_VALUE3 
AND table_height= SOME_VALUE2 
AND table_length = SOME_VALUE3 

Est-ce ce que vous cherchez? Ou essayez-vous d'interroger plusieurs tables? Si oui, essayez ceci:

Select * 
FROM TABLE_SOLID solid 
Inner join table_width width on solid.w_id = width.w_id 
inner join table_height height on solid.h_id = height.h_id 
inner join table_length length on solid.l_id = length.l_id 

Ce lien peut être utile pour vous http://dev.mysql.com/doc/refman/5.0/en/join.html

+0

Oui, je souhaite interroger plusieurs tables. –

0

Votre schéma DB n'est pas clair pour moi.

Ces quatre tables sont-elles différentes? Si oui, comment sont-ils reliés, c'est-à-dire comment extraire largeur, hauteur, longueur pour un solide donné?

Ou sont ces quatre colonnes dans 1 table, identifiées par s_id?

Veuillez clarifier.

0

J'espère avoir compris votre schéma.

SELECT 
    s.* 
FROM 
    table_solid AS s 
WHERE 
    s.s_id IN 
(
(SELECT s_id FROM table_s_h INNER JOIN table_height USING (h_id) WHERE h_name = H) 
INTERSECT 
(SELECT s_id FROM table_s_w INNER JOIN table_width USING (w_id) WHERE w_name = W) 
INTERSECT 
(SELECT s_id FROM table_s_l INNER JOIN table_length USING (l_id) WHERE l_name = L) 
); 

OT: Je ne sais pas si cela fonctionnera dans MySQL et je ne se soucient pas - j'ai ajouté tag « mysql » à la question et vous avez enlevé.

Questions connexes