select
--略
from pairings game
inner join countries my
on my.id = game.my_country_id
inner join countries enemy
on enemy.id = game.enemy_country_id
省略した部分を埋められるかどうか、チャレンジしてみてください。
1Like
2つのテーブルから、特定のカラムを結合して抽出したいのですが、方法が思いつかないため教えていただきたいです。
具体的には、テーブル'countries'とテーブル'pairings'(テーブルの構造は該当するソースコードに記載)から、参考画像のように、3つのカラム(kickoff, my_country, enemy_country)を抽出したいです。
参考画像
-- テーブルの構造 `countries`
--
CREATE TABLE `countries` (
`id` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`ranking` int(11) DEFAULT NULL,
`group_name` varchar(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- テーブルのデータのダンプ `countries`
--
INSERT INTO `countries` (`id`, `name`, `ranking`, `group_name`) VALUES
(1, 'ブラジル', 3, 'A'),
(2, 'メキシコ', 20, 'A'),
(3, 'カメルーン', 56, 'A'),
(4, 'クロアチア', 18, 'A'),
(5, 'スペイン', 1, 'B'),
(6, 'オランダ', 15, 'B'),
(7, 'チリ', 14, 'B'),
(8, 'オーストラリア', 62, 'B'),
(9, 'コロンビア', 8, 'C'),
以下省略
-- テーブルの構造 `pairings`
--
CREATE TABLE `pairings` (
`id` int(11) NOT NULL,
`kickoff` datetime DEFAULT NULL,
`my_country_id` int(11) DEFAULT NULL,
`enemy_country_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- テーブルのデータのダンプ `pairings`
--
INSERT INTO `pairings` (`id`, `kickoff`, `my_country_id`, `enemy_country_id`) VALUES
(1, '2014-06-13 05:00:00', 1, 4),
(2, '2014-06-14 01:00:00', 2, 3),
(3, '2014-06-14 04:00:00', 5, 6),
(4, '2014-06-14 07:00:00', 7, 8),
(5, '2014-06-15 01:00:00', 9, 10),
(6, '2014-06-15 04:00:00', 13, 14),
(7, '2014-06-15 07:00:00', 15, 16),
(8, '2014-06-15 10:00:00', 11, 12),
(9, '2014-06-16 01:00:00', 17, 18),
(10, '2014-06-16 04:00:00', 19, 20),
以下省略
select pairings.kickoff, countries.name AS 'my_coutry', countries.name AS 'enemy_coutry'
from countries LEFT OUTER JOIN pairings ON countries.id = pairings.my_country_id;
上記コードで試してみて、当然ですが、my_country,enemy_countryどちらにも同じ国名が表示されました。
select
--略
from pairings game
inner join countries my
on my.id = game.my_country_id
inner join countries enemy
on enemy.id = game.enemy_country_id
省略した部分を埋められるかどうか、チャレンジしてみてください。
chat-gptに聞いてみました。
SELECT pairings.kickoff, my_country.name AS my_country, enemy_country.name AS enemy_country
FROM pairings
JOIN countries AS my_country ON pairings.my_country_id = my_country.id
JOIN countries AS enemy_country ON pairings.enemy_country_id = enemy_country.id;
@juza11
Questioner