Query с LEFT JOIN и LIMIT 1 в JOIN я не функционирует

У меня есть следующие 2 подмостков order и tracking. Структуры - следующие:

Order (колонны и данные):

id fecha       nroorder description
1  2017-22-01  1000001  Order1
2  2017-22-01  1000002  Order2
3  2017-22-01  1000003  Order3

Tracking (колонны и данные):

id idorder idstatus
1  1       1
2  1       2
3  1       3
4  2       1
5  2       2
6  3       1
7  3       2

Вопрос во все это состоит в том, что мне нужно, чтобы я возвратился каждый order с tracking idstatus выше, а именно, что мне нужно, чтобы я возвратился:

order.id order.fecha order.nroorder order.description tracking.idstatus
1        2017-22-01  1000001        Order1            3
2        2017-22-01  1000002        Order2            2
3        2017-22-01  1000003        Order3            2

Я попытался со следующей инструкцией (в действительности с некоторыми, но это та, которая больше приближается):

SELECT `order`.*, d.*
 FROM `order` left JOIN (SELECT tracking.* 
         FROM tracking
        ORDER BY tracking.id DESC limit 1) d
ON `order`.`id` = d.idorder

В tracking я это упорядочиваю из-за id, чтобы доставать последнего, потому что из-за правила дела tracking они увеличиваются Ваш idstatus по мере того, как они вводятся.

Что плохое или то, чего мне не хватает?

3
задан 24.01.2017, 23:25
0 ответов

Пробуй меняя такую консультацию. Из способа, что это у тебя есть, одинокий subquery будет приносить тебе реестр всех, которые есть, и то, в чем ты нуждаешься, является реестром из-за каждой команды.

SELECT `order`.*, d.idstatus
FROM `order` LEFT JOIN (SELECT tracking.idorder, MAX(tracking.idstatus) As idstatus  
         FROM tracking
        GROUP BY tracking.idorder) d
ON `order`.`id` = d.idorder
3
ответ дан 03.12.2019, 17:31

Субконсультация могла бы решать твой вопрос:

SELECT O.*, 
(SELECT tracking.idstatus 
        FROM tracking T
        WHERE T.idorder = O.id
        ORDER BY tracking.id DESC limit 1)
FROM `order` O
3
ответ дан 03.12.2019, 17:31

Твоя проблема состоит в том, что ты делаешь LIMIT в JOIN; с этим только ты приносишь линию tracking вместо одной из-за каждой линии order.

Эта консультация делает то, в чем ты нуждаешься:

SELECT
    `order`.id,
    `order`.fecha,
    `order`.nroorder,
    `order`.description,
    tracking.idstatus

FROM `order`
LEFT JOIN tracking
    ON tracking.id = (
        SELECT id
        FROM tracking
        WHERE tracking.idorder = `order`.id
        ORDER BY tracking.id DESC
        LIMIT 1);
0
ответ дан 03.12.2019, 17:31

Теги

Похожие вопросы