LoginSignup
juza11
@juza11

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

2つのテーブルから、特定のカラムを結合して抽出したい

2つのテーブルから、特定のカラムを結合して抽出したいのですが、方法が思いつかないため教えていただきたいです。

具体的には、テーブル'countries'とテーブル'pairings'(テーブルの構造は該当するソースコードに記載)から、参考画像のように、3つのカラム(kickoff, my_country, enemy_country)を抽出したいです。

参考画像

スクリーンショット 2023-11-15 140703.jpg

該当するソースコード

-- テーブルの構造 `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どちらにも同じ国名が表示されました。

0

1Answer

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

Comments

  1. 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;
    
  2. @juza11

    Questioner

    @albireoさん
    @ikepu-tpさん
    ありがとうございます。
    チャレンジしてみます。

  3. @albireo さん
    大変申し訳ございません!!
    普通にコメントしたつもりが,リプになっておりました。
    さらにチャレンジしてみてくださいとありながらの普通に回答を載せたことになってしまい,本当に申し訳ございません。
    @juza11 さん
    自分のコメントはご放念ください!

Your answer might help someone💌