2012-01-19 10 views
0

内部結合に問題があります。内部結合を使用してテーブルを結合する前に、テーブルをフィルタリングする必要があります。次のコードはもちろん間違っていますが、私はこのようなものが必要です。助けてください。INNER JOIN選択時

SELECT * FROM hotel LEFT OUTER JOIN (**hotel_table where hotel_table.id_offer=$id**) ON (hotel.id = hotel_table.id_hotel) 

編集:速い答えを

感謝。 「すべての派生テーブルは、独自の別名を持っている必要があります」マイコード:私はこの問題を解決するにはどうすればよい

SELECT * 
FROM 
    czajka_zakwaterowania 
    LEFT OUTER JOIN 
    (
    SELECT * 
    FROM czajka_hotel_l 
    WHERE czajka_hotel_l.id_hotel=$id 
    ) 
    ON (czajka_zakwaterowania.id = czajka_hotel_l.id_hotel) 

しかし、私はエラーを取得しますか?

このコードでは、「すべての派生テーブルには別のエイリアスが必要です」というエラーが表示されます。削除できません。

+3

GBNの答えで再度確認してください。派生テーブルの ")"と "ON"の間に名前がありません。 –

+0

最後の2行をこれに変更してください: ')CZAJKA_HOTEL_L ON(czajka_zakwaterowania.id = czajka_hotel_l.id_hotel)'。あなたが見ることができるように、私は ')'と 'ON'の間に** czajka_hotel_l **を追加しました。このようにして、派生テーブルに別名を与えました。 gbnはこれも彼の答えで行いましたが、あなたはそれを忘れました。 –

答えて

5
SELECT * 
FROM 
    hotel 
    LEFT OUTER JOIN 
    hotel_table ON hotel.id = hotel_table.id_hotel AND hotel_table.id_offer=$id 

または

SELECT * 
FROM 
    hotel 
    LEFT OUTER JOIN 
    (
    SELECT * 
    FROM hotel_table 
    WHERE hotel_table.id_offer=$id 
    ) ht ON hotel.id = ht.id_hotel