簡體   English   中英

Select 表 A 中的行,其中 ID 在表 B 上不存在或如果存在,select 僅當超過 3 個月大

[英]Select rows from table A where ID doesn't exists on table B or if exists, select only if is more than 3 months old

我有兩張表,一張存儲客戶通過在我們電子商務網站的前端添加產品創建的購物車,另一張表(訂單)在客戶完成結帳后填充。

一些用戶已經放棄了購物車,所以我想通過兩個條件檢查購物車表並將其與訂單表進行比較:

  • 如果用戶有購物車條目並且沒有自己的訂單條目,則 select 該購物車
  • 如果用戶有一個購物車條目和一些訂單條目,但用戶在過去三個月內沒有訂單並且購物車是新的三個月,那么 select 該購物車

餐桌推車

cart_id   user_id      modified_on
5477        1125    2022-01-04 15:31:31
5476        2998    2022-01-04 14:34:31
5474        1305    2022-01-03 21:52:57
5473        986     2022-01-03 13:13:12
5471        3040    2022-01-03 01:32:28

表訂單

order_id    user_id    created_on
44           927      2018-11-23 00:26:43
46           932      2018-11-26 14:36:28
47           945      2018-11-26 15:35:34
48           948      2018-11-27 21:33:37
53           945      2018-12-02 18:20:55

到目前為止,我已經有了這個查詢螺母,我知道這是錯誤的

SELECT DISTINCT
    `vmc`.`user_id`,
    `vmo`.`order_id`,
    `vmc`.`created_on` AS `Order Created On`,
    `vmc`.`modified_on` AS `Cart Last Modified`,
FROM `carts` `vmc`
LEFT JOIN `orders` `vmo`
   ON `vmc`.`user_id` = `vmo`.`user_id`
WHERE `vmo`.`order_id` IS NULL 
    OR (`vmo`.`created_on` <= NOW() - INTERVAL 3 MONTH AND `vmc`.`cart_id` <> NULL)
ORDER BY `vmc`.`modified_on` DESC

以下查詢應為您提供所需的內容:

SELECT
    `carts`.`user_id`,
    `sq2`.`order_id`,
    `sq2`.`last_order_date` AS `Last Order Date`,
    `carts`.`cart_id`,
    `carts`.`modified_on` AS `Cart Last Modified`
FROM `carts`
LEFT JOIN (
    SELECT `user_id`, `order_id`, `sq1`.`last_order_date`
    FROM `orders` INNER JOIN  (
        SELECT `user_id`, MAX(`created_on`) as `last_order_date`
        FROM `orders`
        GROUP BY `order_id`
        ) `sq1` ON `orders`.`user_id` = `sq1`.`user_id`
) `sq2` ON `carts`.`user_id` = `sq2`.`user_id`
WHERE `sq2`.`order_id` IS NULL OR `sq2`.`last_order_date` <= NOW() - INTERVAL 3 MONTH
ORDER BY `carts`.`modified_on` DESC

具有別名sq1的子查詢會生成orders表中每個唯一user_id與該user_id的最大created_on日期(別名為last_order_date )的關系。 具有別名sq2的子查詢將前一個查詢與orders表進行內部連接,以便我們還可以獲得與每個user_id的最大created_on行關聯的order_id列。 最后,我們將carts表與sq2表進行左連接並應用我們的條件。

暫無
暫無

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

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