2013-04-30 3 views
0

У меня есть схема аренды в моей базе данных.left join или аналогичный запрос

У этого есть 3 стола, пользователь, арендаTrack и замок.

пользователь имеет уникальный элемент RFIDCode. in rentingTrack У меня может быть пользователь (он или она арендовал хотя бы один раз) или нет (он/она никогда не снимал). Если пользователь арендован, мне нужен returnLock для последней аренды, так как rentingID автоинкремлен, это max (leaseingID). С таблицей блокировки я получил идентификатор парковки, данные, которые мне нужны.

enter image description here

Проблема заключается в том, как получить 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 

Что мне нужно есть, если идентификатор пользователя не в таблице rentingTrack я получил:

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

И если идент в rentingTrack

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

Как я могу заполнить запрос, чтобы получить идентификатор парковки?

+0

Я думаю, что я смогу помочь you.but Вы можете перефразировать вопрос? – Luv

+0

Мне нужно получить parkingID, запрос не завершен, потому что мне нужны отношения betwenn r.returnLock и таблица блокировок, чтобы получить идентификатор парковки. Я объяснил это? – user1256477

+0

Просьба привести несколько примеров данных. – Luv

ответ

1

Попробуйте это. (Нужны некоторые примеры данных для дублей)

select distinct u.userID,l.parkingID 
from users 
left join rentingTrack r on u.userID=r.userID 
left join locks l on r.returnLock=l.lockid 
+0

Как насчет необходимости получить строку 'rentingTrack' с' MAX (leaseingID) '? – Barmar

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 
Смежные вопросы