0

私の2つのテーブルは次のとおりです。

 table User ( userid,  username,  ... )
 table Bookings ( bookingid, userid, destination, ...) 

destination = "Greece" の予約をしているユーザーによるすべての予約を一覧表示したいと考えています。

first match: (user name) 
  Destination: Greece ( = match criteria) 
  Destination: [other destinations from this user]
  Destination: destionation n ...

second match: (user name) 
  Destination: Greece 
  Destionation: [other destionations]

[...]

より複雑な SQL は初めてです。これにはサブセレクトが必要だと思います。しかし、それはどのように機能しますか?

4

2 に答える 2

0

私はJOINでそれを行います:

ロジックは、サブクエリで、一致する予約を持つユーザーのユーザー ID を取得することです。

その ID のリストを使用して、bookings テーブルに再び参加します。したがって、これにより、最初の基準に一致するすべてのユーザーのリストが取得されます。

SELECT b.* 
FROM Bookings b
INNER JOIN (
    SELECT userid
    FROM Bookings
    WHERE destination = "Greece"
    GROUP BY userid
) aux ON aux.userid = b.userid

PS:

@Kickstart がコメントで指摘しているように、サブクエリにaSELECT DISTINCT useridまたは aを追加する必要があります。GROUP BY useridそうしないと、行が繰り返される可能性が高くなります。

于 2013-08-23T12:20:35.913 に答える