0

データベースにレンタル スキーマがあります。

user、rentingTrack、lock の 3 つのテーブルがあります。

ユーザーは一意の要素として RFIDCode を持っています。レンタルトラックでは、ユーザーがいる場合があります(少なくとも一度はレンタルしたことがある)か、ない場合があります(一度もレンタルしたことがありません)。ユーザーがレンタルした場合、最後のレンタルの returnLock が必要です。rentingID は自動インクリメントされるため、max(rentingID) です。ロックテーブルを使用して、必要なデータであるparkingIDを取得しました。

ここに画像の説明を入力

問題は、parkingID を取得する方法です。半分のクエリがあります。

 SELECT  u.userID, l.parkingID

 FROM locks l, user u

LEFT JOIN (SELECT r1.* FROM rentingTrack r1 INNER JOIN 
(SELECT userID, MAX(rentingID) maxRentingID FROM rentingTrack GROUP BY userID) r2 
on r1.rentingID = r2.maxRentingID) r on u.userID = r.userID 

 WHERE u.userCodeRFID= 3166681355

私が必要とするのは、userID が私が取得した RentingTrack テーブルにない場合です:

   userID   |  parkingID
  ----------+-----------
        34  |     NULL 

また、userID がrentingTrack にある場合

   userID   |  parkingID
  ----------+-----------
        34  |        5

クエリを完了してparkingIDを取得するにはどうすればよいですか?

4

2 に答える 2

0
SELECT  u.userID, l.parkingID

FROM user u

LEFT JOIN (SELECT r1.userID, r1.returnLock
           FROM rentingTrack r1
           INNER JOIN 
              (SELECT userID, MAX(rentingID) maxRentingID
               FROM rentingTrack
               GROUP BY userID) r2 
           ON r1.rentingID = r2.maxRentingID) r on u.userID = r.userID 

LEFT JOIN locks l ON r.returnLock = l.lockID

WHERE u.userCodeRFID= 3166681355
于 2013-04-30T08:02:28.200 に答える