0

Mysql データベースには、国、都市、ホテルの 3 つのテーブルがあります。それらの関係は次のとおりです。国には多くの都市があり、都市には多くのホテルがあります。

特定のcountries.idを指定して、すべてのホテルを選択できるようにしたいと考えています。私はSQLがかなり苦手です。私が思いついた結合ステートメントは次のとおりで、常に0行を返します。

SELECT 
    countries.name as country,
    cities.name as city,
    hotels.name as hotel
FROM 
    countries
    left join cities
        on countries.id = cities.country_id
    left join hotels
        on cities.id = hotels.city_id

WHERE
    countries.id = @id

ヘルプ?

4

2 に答える 2

2

where句を省略して、実際にどのレコードがあるかを確認してください。使用している特定のIDが既知の国IDではない可能性があります。


また、厳密にフォーマット/スタイルの問題については、私見これはより良いです:

SELECT 
    countries.name as country,
    cities.name as city,
    hotels.name as hotel
FROM countries
left join cities on cities.country_id = countries.id
left join hotels on hotels.city_id = cities.id
WHERE countries.id = @id
于 2012-06-24T14:28:23.237 に答える
1

私の経験則では、FROM 句は常に、結果として必要な実際のテーブルで開始します。

SELECT 
  countries.name as country,
  cities.name as city,
  hotels.name as hotel
FROM  
  hotels JOIN cities ON cities.id = hotels.city_id
  join countries on countries.id = cities.country_id
WHERE
  countries.id = @id

追加の利点は、外部結合が必要ないことです:-)

于 2012-06-24T14:29:23.043 に答える