2010-11-18 4 views
0

J'ai deux tables on est heardt et l'autre est Judrequête SQL pour joindre deux tables aider

En heardt j'ai trois colonnes j1, j2, j3 (chacun a une valeur de jcode)

En jugement j'ai jcode et jname.

Je veux afficher jname en 3 liste déroulante selon j1, j2, j3.

Comment puis-je encadrer ma requête sql.

Répondre

0

Je ne suis pas sûr de comprendre votre question car le schéma semble étrange.

Cependant, il semble que vous voulez obtenir:

  • Dropdown1: Afficher jname où jcode est dans une cellule j1 dans heardt
  • Dropdown2: Afficher jname où jcode est dans une cellule j2 dans heardt
  • Dropdown3: Afficher jname où jcode est dans une cellule j3 dans heardt

Pour faire que vos requêtes pourraient être:

select jname, jcode 
from heardt 
inner join jud ON heardt.j1 = jcode 

select jname, jcode 
from heardt 
inner join jud ON heardt.j2 = jcode 

select jname, jcode 
from heardt 
inner join jud ON heardt.j3 = jcode 

Une alternative, qui peuvent vous intéresser, est si vous voulez obtenir pour chaque heardt ligne et les trois jnames que vous pourriez faire ce match:

select jud1.jname as jname1, jud2.jname as jname2, jud3.jname as jname3 
from heardt 
left join jud as jud1 on jud1.jcode = heardt.j1 
left join jud as jud2 on jud2.jcode = heardt.j2 
left join jud as jud3 on jud3.jcode = heardt.j3 

Cependant, une meilleure solution serait de faire des tableaux comme ceux-ci (choisir une meilleure appellation):

jud table 
--------- 
jcode 
jname 

heardt table 
------------ 
unsure on the purpose of this table 

dropdown table (name this after whatever your dropdowns represent, maybe this is heardt) 
---------- 
dropdownId 

dropdownjuds table 
------------- 
dropdownId 
jcode 

de cette façon, vous pouvez faire une requête comme ci-dessous, et y Vous ne stockez pas de colonne par liste déroulante. Par exemple, si vous avez besoin soudainement j4 plus tard - avec cette méthode, vous pouvez simplement ajouter un nouveau dropdown et les entrées pertinentes à la table dropdownjuds. Que faire si les listes déroulantes ont des nombres inégaux? Vous seriez en train d'utiliser des nulls actuellement, je suppose, mais pourquoi avoir des colonnes j1 et j3 si la ligne a seulement un j2? Avec le design proposé, vous contournez cela.

select jname 
from dropdownjuds ddj 
inner join jud on ddj.jcode = jud.jcode 
where dropdownId = * 

Où * est 1 pour dropdown1, 2 pour dropdown2 etc.

+0

Merci. Je veux exactement comment vous avez compris ma question. – Ishan

+0

Dans votre première suggestion pour chaque requête, je peux utiliser une chaîne pour stocker la valeur et la passer dans la liste déroulante. Comment puis-je le faire pour le second? – Ishan

+0

La deuxième requête ne convient pas pour une seule liste déroulante - comment savoir si utiliser 'jname1' ou 'jname3' à droite, sauf si vous voulez les lier spécifiquement à des zones de liste déroulante dans votre code qui est mauvais. J'utiliserais les premières requêtes, ou ma révision de schéma proposée. –

0

Si vous développiez l'exigence (ce qui donne des données dans le tableau et montrant votre résultat attendu en termes de mêmes données), il Aidez-moi.

Si vous souhaitez avoir une requête pour obtenir les noms d'un ensemble d'entrées (j1, j2, j3), dans ce cas, vous devrez avoir des requêtes internes ou des jointures multiples.

select h.j1, hj1.jname, hj1.jcode, h.j2, hj2.jname, hj2.jcode, h.j3, hj3.jname, hj3.jcode 
from heardt as h 
inner join jud as hj1 ON h.j1 = hj1.jcode 
inner join jud as hj2 ON h.j2 = hj2.jcode 
inner join jud as hj3 ON h.j3 = hj3.jcode 
where [email protected] and [email protected] and [email protected]