0

外部キーに関連する3つのテーブルを持つデータベースがあります。

旅行:

| ID | 番号| 日付|
------------------

日々:

| ID | TripID | 日付| 開始| 終了|
------------------------------

脚:

| ID | DayID | 起源| 目的地|
--------------------------------

次の結合を使用して、このデータベースからデータを取得します。

SELECT * FOM Trips t JOIN Days d
    ON t.Id = d.TripId
JOIN Legs l 
    ON d.Id = l.DayId
WHERE t.Id = tripId

これは、クエリされた旅行に関連付けられた各区間の1行を含む結果を返します。

| Trips.ID | Trips.Number | Trips.Date | Days.ID | Days.TripID | Days.Date | Days.Start | Days.End | Legs.ID | Legs.DayID | Legs.Origin | Legs.Destination |
-------------------------------------------------- -------------------------------------------------- ---------------------------------------------

これは特定のトリップIDに対しては正常に機能しますが、たとえば、複数のトリップを返すクエリを実行するとします。

    SELECT * FROM Trips t JOIN Days d
       ON t.ID = d.TripID
    足に参加l
       ON d.Id = l.DayId
    WHERE d.Date> date

上記のクエリの結果を1回のトリップに制限し、そのトリップに関連付けられているすべての行を取得するにはどうすればよいですか?

4

1 に答える 1

1

私は sqlite の構文について 100% 確信があるわけではありません (私は oracle に精通しています) が、これはあなたが望むものだと思います:

SELECT * FROM Trips t JOIN Days d
ON t.ID = d.TripID
JOIN Legs l
ON d.Id = l.DayId
WHERE d.ID IN (  
    SELECT ID FROM Days d WHERE d.date > date ORDER BY d.date LIMIT 1
)
于 2012-12-28T18:21:32.977 に答える