2012-12-29 18 views
8

stworzyłem 3 różne tabele i kodowanie dla niego jestDlaczego ten kod SQL nie działa?

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'); 

a ja odpytywanie go z tego

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 

ale tabela pokazuje, że wyniki tylko nazwę koszuli, muszę kolumna rozmiarów wyświetlana również na ekranie. W części OD wstawiłem shirt, size, ale wystąpił błąd. Patrząc dalej w to widziałem wiele osób umieszczających tylko nazwę pierwszego stołu w części OD. Nie widzę, jak to ma wyglądać kolumna size.name. Co ja robię źle?

Odpowiedz

11

Mają tę samą nazwę kolumny (, chociaż z różnych tabel). Trzeba dostarczyć ALIAS na jednej z kolumn (lub obu), np

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

DZIĘKI !!!! .. I zorientowaliśmy się ostatniej nocy, ale to jest właściwą odpowiedzią, więc wciąż ją zaznaczałem. :) – Optiq