Столбец не найден в операторе выбора внутри оператора выбора

0

Попытка выбрать одну строку за раз из этого запроса (например, где rank = 1). Тем не менее, это не работает, потому что "неизвестный столбец" ранг ", если я меняю его на" WHERE id = 1 ", тогда он работает, но по какой-то причине он не знает, какой ранг даже он установлен

    SET @rownum=0;

  SELECT @rownum := @rownum + 1 AS rank, id, client, date, time, pickupCity, pickupState
  FROM (
        SELECT r.id, CONCAT(c.fname, ' ', c.lname) as client, r.date,
    LOWER(TIME_FORMAT(r.time, '%l:%i%p')) as time, r.pickupCity,               r.pickupState 

    FROM request r  
    INNER JOIN client c  ON r.client = c.id 
    INNER JOIN pickup p ON r.id = p.request
    INNER JOIN driver d ON d.id = p.driver

    WHERE date = '2018-04-18' AND d.id = 1
    GROUP BY time

  ) AS tab
    HAVING rank = 1;
  • 0
    здесь SELECT @rownum := @rownum + 1 AS rank тогда вы делаете, where rank=1 .. это неправильно, удалите where, поскольку это не нужно
  • 0
    Я думаю, что вы подтвердили, что предложение where выполняется перед выбором в порядке выполнения stackoverflow.com/questions/24127932/…
Показать ещё 1 комментарий
Теги:

1 ответ

2
Лучший ответ

В MySQL вы можете сделать это, используя HAVING:

SELECT @rownum := @rownum + 1 AS rank, id, client, date, time, pickupCity, pickupState
FROM (SELECT r.id, CONCAT(c.fname, ' ', c.lname) as client, r.date, 
             LOWER(TIME_FORMAT(r.time, '%l:%i%p')) as time, r.pickupCity, 
             r.pickupState
      FROM request r JOIN
           client c
           ON r.client = c.id JOIN
           driver d
           ON ?
           pickup p
           ON d.id = p.driver
      WHERE date = '2018-04-18' AND d.id = 1
      GROUP BY time
     ) t CROSS JOIN
     (SELECT @rank := 0) params
HAVING rank = 1;

Заметки:

  • The ?? для отсутствующих условий JOIN.
  • Я попытался исправить синтаксис JOIN. Вы должны изучить усилия по изучению правильного, явного, стандартного синтаксиса JOIN.
  • Вы можете установить @rank в запросе; вам не нужно отдельное выражение.
  • GROUP BY не имеет смысла, поскольку в SELECT имеется много неагрегированных столбцов.

Если бы мне пришлось размышлять, основной причиной ваших проблем является отсутствие условия JOIN, и вы приложили много усилий для того, чтобы обойти это.

  • 0
    Это работает, однако, по какой-то причине, если я хочу, чтобы rank = 1, тогда я получаю, когда rank фактически равен 2. Это всегда на единицу выше того, что я ищу
  • 0
    @JordanFarris. , , Возможно, у вас есть неожиданное значение, которое является первым. , , такие как NULL .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню