kad
@kad (Yuta)

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!

表示が重複してしまう

Q&A

実行したいこと

このように表示させたいです。

Image from Gyazo

現状

有名人の名前と、国名が重複してしまいます

Image from Gyazo

現状コード 

INNER JOINにて、共通の部分をまとめてるとは思うのですが、重複してしまいます。
WHERE句にて処理をしないといけないのでしょうか?
INNNER JOINにて共通部分はまとめていると思うので、なぜ重複してしまうか分りません。
分かる方居ましたらお願い致します。

SELECT 
`celebrities`.`name`, `countries`.`name`, `countrylanguages`.`language`
 FROM celebrities 
 INNER JOIN countries
 ON celebrities.country_code = countries.code 
 INNER JOIN countrylanguages
 ON celebrities.country_code = countrylanguages.country_code

テーブル

celebrities テーブル

Image from Gyazo

countries テーブル

Image from Gyazo

Image from Gyazo

countrylanguage テーブル

Image from Gyazo

0

3Answer

問いに「第一言語を出力してください」とあって、第一言語のみを取得する必要があるので、is_officialに対する条件を追加する必要があると思います。

 INNER JOIN countrylanguages
    ON celebrities.country_code = countrylanguages.country_code
+  AND countrylanguages.is_official = TRUE

(追記)
@uasiさん

1国につき2つ以上の言語で真になることもありそうです。

よく見たら、同じ国コードに対して2つTrueのものありますね…。失礼いたしました。
たしかに公用語といえば1つの国に対して複数あったりするので、percentageまで見るのが求められていることなのかもしれませんね。

is_official = T かつ percentage が最大のものが第一言語とするなら、クエリはこのような感じになると思います。

INNER JOIN
	(
      SELECT main.country_code
      		,main.language
        FROM countrylanguages AS main
       INNER JOIN(
         			SELECT country_code
                          ,max(percentage) AS max_percentage
                      FROM countrylanguages
                     WHERE is_official = TRUE
                  GROUP BY country_code
         		)AS sub
       ON main.country_code = sub.country_code
      AND main.percentage = sub.max_percentage
    )
    AS countrylanguages
 ON celebrities.country_code = countrylanguages.country_code
2Like

Comments

  1. @kad

    Questioner

    比較対象がこんなにあるとは思いませんでした。
    ありがとうございます。

@YottyPG is_official は公用語を表すフラグと思われるので、1国につき2つ以上の言語で真になることもありそうです。実際に countrylanguages テーブルでは AFG の Dari と Pashto で 真になっています。

@kad 設問に第一言語の定義があればそれに従ってください。なければ is_official = T かつ percentage が最大のものが第一言語かもしれません。

2Like

ありがとうございます。
is_official = T かつpercentage が最大のものが第一言語だと思います。
両方に該当する絞り込み方法考えたいと思います。

0Like

Your answer might help someone💌