8

私は3つの異なるテーブルを作成し、そのコーディングは

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

そして私はこれでそれを照会しています

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

結果の表にはシャツの名前しか表示されていないので、画面にもサイズの列を表示する必要があります。FROMの部分に入れshirt, sizeましたが、エラーが発生していました。さらに詳しく調べてみると、多くの人がFROM部分に最初のテーブル名を入れているだけでした。size.name列を表すことがどのように想定されているのかわかりません。私は何が間違っているのですか?

4

1 に答える 1

11

それらは同じ列名を持っています(異なるテーブルからのものですが)。ALIAS列の1つ(または両方)にを指定する必要があります。例:

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
于 2012-12-29T10:55:34.243 に答える