簡體   English   中英

在select語句內的Select語句中找不到列

[英]Column not found in Select statement inside select statement

嘗試一次從此查詢中選擇一行(例如,rank = 1)。 但是,它不起作用,因為“ unknown column'rank'。如果我將其更改為“ 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;

在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;

筆記:

  • ?? 用於缺少的JOIN條件。
  • 我經過努力來修復您的JOIN語法。 您應該努力學習正確,顯式,標准的JOIN語法。
  • 您可以在查詢中設置@rank 您不需要單獨的聲明。
  • GROUP BY沒有意義,因為SELECT有許多未聚合的列。

如果我不得不推測,問題的根本原因是缺少JOIN條件,而您為此付出了很多努力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM