簡體   English   中英

如何使用左連接mysql從表2中獲取最后一行

[英]how to get last row from table 2 using left join mysql

我有兩個表tbl_product_checkouttbl_product_checkout_status ,我tbl_product_checkout_status中獲取最后一行tbl_product_checkout_status

//tbl_product_checkout

product_checkout_id    user_id    product_checkout_order_no
-----------------------------------------------------------
        1                 1              ORD123456


//tbl_product_checkout_status

checkout_status_id    product_checkout_id    checkout_status_check
------------------------------------------------------------------
        1                      1                  Dispatched
        2                      1                  Delivered

我嘗試使用以下查詢

SELECT * 
  FROM tbl_product_checkout pc 
  LEFT 
  JOIN tbl_product_checkout_status cs 
    ON cs.product_checkout_id = pc.product_checkout_id  
 WHERE pc.user_id = 1 
 GROUP 
    BY pc.product_checkout_id 
 ORDER 
    BY cs.checkout_status_id DESC

但是上述查詢的輸出是

user_id    product_checkout_order_no    checkout_status_check
-------------------------------------------------------------
   1              ORD123456                  Dispatched

但我想要這樣的結果,

user_id    product_checkout_order_no    checkout_status_check
-------------------------------------------------------------
   1              ORD123456                  Delivered

我認為您的團隊搞砸了您想要的結果。 我研究了您給定的數據庫架構,並進行了小提琴,並設法獲得了所需的結果。 所以你的sql應該是這樣的:

SELECT * FROM tbl_product_checkout as pc 
LEFT JOIN tbl_product_checkout_status as cs ON 
cs.product_checkout_id = pc.product_checkout_id 
WHERE pc.user_id = 1 ORDER BY cs.checkout_status_id DESC limit 1

通過使用限制1,您將獲得我們按DESC排序的最后一行。

請記住,我刪除了日期部分,因為示例代碼中沒有日期。

簽出小提琴

添加一個where = max子查詢,例如

DROP TABLE IF EXISTS tbl_product_checkout,tbl_product_checkout_status;

CREATE TABLE tbl_product_checkout(product_checkout_id INT,   user_id INT,   product_checkout_order_no VARCHAR(20));
INSERT INTO tbl_product_checkout VALUES
(        1       ,          1  ,            'ORD123456');


CREATE TABLE tbl_product_checkout_status(checkout_status_id INT,   product_checkout_id INT,    checkout_status_check VARCHAR(20));
INSERT INTO tbl_product_checkout_status VALUES
(        1      ,                1 ,                 'Dispatched'),
(        2      ,                1 ,                 'Delivered');

SELECT * FROM
tbl_product_checkout T1
LEFT JOIN tbl_product_checkout_status T2 ON T1.PRODUCT_CHECKOUT_ID = T2.PRODUCT_CHECKOUT_ID
WHERE T2.CHECKOUT_STATUS_ID = (
SELECT MAX(T3.CHECKOUT_STATUS_ID) 
FROM tbl_product_checkout_status T3 
WHERE T3.PRODUCT_CHECKOUT_ID = T2.PRODUCT_CHECKOUT_ID
)
;

結果

+---------------------+---------+---------------------------+--------------------+---------------------+-----------------------+
| product_checkout_id | user_id | product_checkout_order_no | checkout_status_id | product_checkout_id | checkout_status_check |
+---------------------+---------+---------------------------+--------------------+---------------------+-----------------------+
|                   1 |       1 | ORD123456                 |                  2 |                   1 | Delivered             |
+---------------------+---------+---------------------------+--------------------+---------------------+-----------------------+
1 row in set (0.00 sec)

暫無
暫無

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

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