2017-09-30 1 views
1

J'ai une table appelée product qui permet de dire ressemble à ceci:INNER JOIN mysql d'une table à une autre où la base de multiples de même id

produit

product_id | cults_id1 | cults_id2 | cults_id3 
    ----------------------------------------------------- 
     1  |  5  |  4  |  2 

Et aussi thats table basée sur cette appelé cultivar:

cultivar

cults_id | cults_name | 
    ------------------------- 
     1 | berries | 
     2 | fruit  | 
     3 | choc  | 
     4 | wood  | 
     5 | mysql!  | 

Comment puis-je créer une requête JOIN pour obtenir chaque nom de cultivar table où l'ID de produit dans tableau produit est le même que cults_id dans le tableau cultivar?

SORTIE

Mon Cults produit

berries, Mysql!, wood, fruit 

ne pensent pas un INNER JOIN est le chemin à parcourir, mais j'aurais essayé quelque chose comme ceci:

$query = "SELECT cultivars.cults_name 
     FROM product 
     INNER JOIN wine_cultivar ON wine_cultivar.cults_id = product.cultivar_1_id 
     INNER JOIN wine_cultivar ON wine_cultivar.cults_id = product.cultivar_2_id 
     INNER JOIN wine_cultivar ON wine_cultivar.cults_id = product.cultivar_3_id 
     INNER JOIN wine_cultivar ON wine_cultivar.cults_id = product.cultivar_4_id 
     "; 

i essayé une jointure interne plusieurs fois ciblant tous les identifiants mais ne pensez pas que c'est la voie à suivre. Aussi c'est juste une partie de ma requête sql.

+0

SQL Server ou MySQL, lequel? – Sami

+1

S'il vous plaît modifier votre question et montrez-nous votre résultat attendu. –

+1

Pensez vraiment à normaliser votre table 'product' avec le champ ** one ** * cultivar_id * où * product_id * sera répété pour différents * cultivar_ids * dans une relation un-à-plusieurs. Cela évite les requêtes complexes avec plusieurs auto-jointures. – Parfait

Répondre

4

Affectez simplement des alias de table à chaque auto-jointure, puis faites référence aux champs correspondants dans SELECT.

En ce moment, vous vous joignez à la même table, mais ne fournissez pas d'alias pour distinguer les quatre que MySQL aurait dû faire Error #1066 pour cette tentative.

SELECT p.product_image_path, p.product_id, p.brand_name, p.product_name, b.botttle_size, v.vintage, 
     t.wine_type_blend, p.price, p.quantity, p.time_created, p.reference_number, p.shipping_cost, 
     c1.cultivar_type as cultivar_type1, c2.cultivar_type as cultivar_type2, 
     c3.cultivar_type as cultivar_type3, c4.cultivar_type as cultivar_type4 
FROM product p 
INNER JOIN wine_bottle b ON b.bottle_id = p.bottle_id 
INNER JOIN wine_vintage v ON v.vintage_id = p.vintage_id 
INNER JOIN wine_type t ON t.type_id = p.type_id 
INNER JOIN wine_cultivar c1 ON c1.cultivar_id = p.cultivar_1_id 
INNER JOIN wine_cultivar c2 ON c2.cultivar_id = p.cultivar_2_id 
INNER JOIN wine_cultivar c3 ON c3.cultivar_id = p.cultivar_3_id 
INNER JOIN wine_cultivar c4 ON c4.cultivar_id = p.cultivar_4_id 
+0

Je pensais que je devrais faire quelque chose comme ceci en ajoutant une valeur à chaque tabel dans la requête, oky merci laissez-moi essayer ceci rapidement – Ylama

+0

il semble prometteur, sans le 'cultivars' la requête ci-dessus fonctionne mais je reçois une erreur' # 1054 - Colonne inconnue 'wine_cultivar.cultivar_id' dans 'on clause' pour cette requête? – Ylama

+0

Oups!Je n'ai pas utilisé d'alias de table dans la clause 'ON'. Voir mise à jour. – Parfait