2012-05-16 5 views
2

Je travaille actuellement sur des requêtes sql embarquées pour un site local. Et je cours dans une confusion. J'ai besoin de faire ceci "Demandez à l'utilisateur pour un fabricant.Imprimer les spécifications de tous les produits par ce fabricant.C'est imprimer le numéro de modèle, le type de produit, et tous les attributs de n'importe quelle relation est appropriée pour ce type."joindre des tables avec un nombre diff pour les colonnes

J'ai essayé la requête suivante

(SELECT * FROM product NATURAL JOIN pc WHERE maker = '$m') 
union (SELECT * FROM product NATURAL JOIN printer WHERE maker = '$m') 
union (SELECT * FROM product NATURAL JOIN laptop WHERE maker = '$m'); 

Mais le problème se pose que chaque table (PC, ordinateur portable, imprimante) n'ont pas les mêmes colonnes. Je pense que ce sera bien pour mon problème de simplement remplir les valeurs NULL si la table ne contient pas cette colonne. J'essaye juste de fusionner toutes les tables et colonnes dans une table superbe et montre cela à l'utilisateur. Ensuite, je voudrais aussi essayer de commander la grande table par les types de produits. Ce que je pense que je vais juste ass un ORDER BY à la fin de la requête. Donc, ma question est comment puis-je rejoindre ces tables?

Relations:

Product(maker, model, type (laptop, printer, pc)) 
Printer(model, color (0,1), type(ink-jet, laser), price) 
Laptop(model, speed, ram, hd, screen, price) 
Pc(model, speed, ram hd, price) 
+0

S'il vous plaît Ne pas [balises de répétition dans le titre] (http://meta.stackexchange.com/a/130208/167443) – yoozer8

+0

Ok Jim Je ne vais pas désolé. –

Répondre

0

Jetez un oeil à « alias de table SQL » pour ajouter des colonnes à la table avec moins de colonnes. Ou vous pouvez entrer des valeurs nulles comme:

Select Col1, Col2, Col3 from Table1 
Union 
Select Col1, Null as Col2, Null as Col3 from Table2 
0

Oui, vous pouvez utiliser UNION pour faire le travail. Faites simplement toutes les listes SELECT les mêmes noms et les mêmes types comme ceci:

SELECT (a,b) FROM TABLE TableB NATURAL JOIN (

    SELECT a,b,c, NULL as d from TableC 
    UNION 
    SELECT a,b,NULL as c, d from TableD 

) AS u ON u.b = TableB.b 
0

Vous pouvez simplement sélectionner des valeurs NULL pour les champs inexistants.

(SELECT maker,pc.model,p.model,price,NULL AS color,speed,pc.type,pc.type,ram,hd,NULL AS screen 
    FROM product p NATURAL JOIN pc WHERE maker = '$m') 
UNION 
(SELECT maker,printer.model,p.model,price,color,NULL AS speed,printer.type,p.type,NULL AS ram,NULL AS hd,NULL AS screen 
    FROM product p NATURAL JOIN printer WHERE maker = '$m') 
UNION 
(SELECT maker,laptop.model,p.model,price,NULL AS color,speed,laptop.type,laptop.type,ram,hd,screen 
    FROM product p NATURAL JOIN laptop WHERE maker = '$m'); 
+0

Mon MySQL n'aime pas cette syntaxe mais cela aide, je pense que je peux l'obtenir. –

+0

@BumSkeeter Quelle erreur obtenez-vous? – kba

+0

ERREUR 1064 (42000): Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'NULL, vitesse, q.type, p.type, RAM, hd, Écran NULL AS DU produit p NATURAL JOIN pc' à la ligne 1 –

Questions connexes