2012-12-29 16 views
8

Ho creato 3 diverse tabelle e la codifica perché èPerché questo codice SQL non funziona?

CREATE TABLE `shirt` (
    `id` int(11) not null, 
    `name` varchar(32), 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `shirt` (`id`, `name`) VALUES 
('1', 'vneck'), 
('2', 'scoop neck'); 

CREATE TABLE `shirt_size` (
    `shirtId` int(11) not null, 
    `sizeId` int(11) not null, 
    PRIMARY KEY (`shirtId`,`sizeId`), 
    KEY `sizeId` (`sizeId`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `shirt_size` (`shirtId`, `sizeId`) VALUES 
('1', '2'), 
('1', '3'), 
('1', '4'), 
('1', '5'), 
('2', '1'), 
('2', '2'), 
('2', '3'), 
('2', '4'), 
('2', '5'), 
('2', '6'), 
('2', '7'); 

CREATE TABLE `size` (
    `id` int(11) not null, 
    `name` varchar(4), 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO `size` (`id`, `name`) VALUES 
('1', 'xs'), 
('2', 's'), 
('3', 'm'), 
('4', 'l'), 
('5', '1x'), 
('6', '2x'), 
('7', '3x'); 

e sto interrogazione con questo

SELECT shirt.name, size.name 
FROM shirt 
     INNER JOIN 
      shirt_size ON shirt_size.shirtId = shirt.id 
     INNER JOIN 
      size ON size.id = shirt_size.sizeId 

ma la tabella che risulta solo mostra il nome della camicia, ho bisogno la colonna delle taglie per mostrarsi anche sullo schermo. Nella parte FROM ho inserito shirt, size ma si è verificato un errore. Guardando più in là ho visto molte persone solo mettere il nome del primo tavolo nella parte FROM. Non vedo come si supponga di rappresentare la colonna size.name. Che cosa sto facendo di sbagliato?

risposta

11

Hanno lo stesso nome di colonna (anche se da tabelle diverse). È necessario fornire un ALIAS su una delle colonne (o entrambi), ad esempio

SELECT shirt.name as ShirtName, 
     size.name as SizeName 
FROM shirt 
     INNER JOIN 
      shirt_size ON shirt_size.shirtId = shirt.id 
     INNER JOIN 
      size ON size.id = shirt_size.sizeId 
+0

GRAZIE !!!! .. ho capito ieri sera, ma questo è la risposta giusta anche se così l'ho ancora segnato. :) – Optiq

Problemi correlati