sa20200301
@sa20200301 (Azusa Hara)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

sqlで複数のテーブルからデータを抽出したい

解決したいこと

複数のテーブルから関連した要素を軸に情報を抽出したい

発生している問題・エラー

ERROR 1146 (42S02): Table 'countries.continents' doesn't exist

image.png

該当するソースコード

Mysql
SELECT *
FROM countries
JOIN continents
ON countries.continent_id = continents.id;

自分で試したこと

USEでテーブル指定なにかしたほうがいいのか、
SELECTで*だけだとだめなのかと下記のようにしてみたり。

mysql> SELECT
    -> countiries.*,
    -> continets.*
    -> FROM countries
    -> JOIN continents
    -> ON countries.continent_id = continents.id;

最終AIに聞いてみても分からず、、、
今回は
countriesテーブルのcontinent_idと
continentsテーブルのidを関連付けしたい!!

0

3Answer

まずは、以下の単純なクエリでそれぞれデータが取ってこれるか確認してみていただけますか?

SELECT *
FROM continents

SELECT *
FROM countries

ERROR 1146 (42S02): Table 'countries.continents' doesn't exist

エラー内容から、「countries」というDB(スキーマ)の 「continents」というテーブルを参照しているようで、DB名とテーブル名がごっちゃになっていそうな気がします。

一度、DB名+テーブル名の一覧を取得して、正しくテーブルが作成されていることを確認してみるのもいいかもしれません。

2Like

Comments

  1. @sa20200301

    Questioner

    拙い文章に回答いただきありがとうございます。

    SELECT *
    FROM continents
    
    SELECT *
    FROM countries
    

    上記を試してみたところ、下記のような状態でした。
    image.png

    その後、DBとテーブルを取得してみると下記のような状態でした。
    image.png
    image.png
    このような状態の場合、`USE テーブル名`の設定が違うのか、
    そもそものSELECT文章に誤りがあるのでしょうか。

  2. まず確認させていただきたいのですが、DatabaseとTableの違いについてはご存じでしょうか?

    現状、countriesというDatabaseの中にcountriesというTableを、
    continentsというDatabaseの中にcontinentsというTableを作っている状態でしょうか?

    Databaseを2つに分けているようですが、continentsとcountriesという関係であれば同じDB内に作成してもいいように思います。

  3. 別DBにそれぞれテーブルを作っている形であれば、以下のような記述で取得はできないでしょうか?

    SELECT *
    FROM countries.countries AS t1
    JOIN continents.continents AS t2
    ON t1.continent_id = t2.id;
    
  4. @sa20200301

    Questioner

    ご返答いただきありがとうございます。
    「DatabaseとTableの違いについて」ここで引っかかっていることが理解でき、問題なく抽出することができました!
    理解しているようで出来ていなかったところを教えてくださりありがとうございます!

Comments

  1. この辺の記事がいいのかもしれません

  2. @sa20200301

    Questioner

    拙い文章にご回答いただきありがとうございます。
    記載いただいた文章を試してみたところ、やはり同様のエラーが返ってきました。
    image.png

    これはやはりテーブルのUSE指定が誤っているのでしょうか。

あなたのデータベースは何ですか? MySQL らしいけどちゃんとその旨質問に書きましょう。そのバージョンなどの情報も。

テーブルの構造が書いてないので質問が成り立ってません。開示できないのであれば、MySQL 付属のサンプルデータベース world とか、多くの閲覧者が持っているデータベースをベースに話をしてください。

MySQL.jpg


【追記】

MySQL 付属のサンプルデータベース world を使った例を書いておきます。

MySQL2.jpg

1Like

Comments

  1. @sa20200301

    Questioner

    ご丁寧に画像も合わせてご指摘いただきありがとうございます。
    初めて質問をした影響で分かりづらい質問となり申し訳ありません。
    恥ずかしながら「MySQL 付属のサンプルデータベース world」というものも初めて知り、改めて勉強になりました。ありがとうございます。

    今回の内容に関しては解決いたしましたので、次回の質問の際に参考にさせていただきます。

Your answer might help someone💌