簡體   English   中英

如何使用 IF 語句進行條件連接

[英]How can i do a condition join with IF statement

您將如何在我需要過濾狀態的表上進行內部連接,但在其中一個狀態值上,我需要對 SQL phpmyadmin 執行額外的日期比較檢查。

我有以下內容:

前任。

INNER JOIN orders backup_orders
    ON backup_orders.bc_id = product_sold.order_id
    AND backup_orders.status_id NOT IN (0, 1, 4, 6, 13, 14)
    AND CONVERT_TZ( STR_TO_DATE( backup_orders.date_modified, "%a, %d %b %Y %T" ) , "GMT", "America/Chicago" )
        >= CONVERT_TZ(STR_TO_DATE(:previous_week_start, "%a, %d %b %Y %T") , "GMT", "America/Chicago")

這只會讓我獲得訂單被取消的記錄,並且在 previous_week_start 之后被取消。 我想要所有記錄,但如果狀態為 5 已取消,則執行日期比較,如果在日期之后取消,則將其添加到結果中。

#編輯:

AND(backup_orders.status_id NOT IN (0,1,4,6,13,14) OR (backup_orders.status_id = 5 AND CONVERT_TZ( STR_TO_DATE( backup_orders.date_modified, '%a, %d %b %Y %T' ) , 'GMT', 'America/Chicago' ) >= CONVERT_TZ(STR_TO_DATE("Thu, 11 Mar 2021 22:00:00 +0000", '%a, %d %b %Y %T') , "GMT", "America/Chicago")))

您可以在 where 條件下使用 case:

INNER JOIN orders backup_orders
    ON backup_orders.bc_id = product_sold.order_id
    and backup_orders.status_id NOT IN (0, 1, 4, 6, 13, 14) 
    AND  (case when backup_orders.status_id =5 then
 CONVERT_TZ( STR_TO_DATE( backup_orders.date_modified, "%a, %d %b %Y %T" ) , "GMT", "America/Chicago" )
        >= CONVERT_TZ(STR_TO_DATE(:previous_week_start, "%a, %d %b %Y %T") , "GMT", "America/Chicago") end)

但是直接比較backup_orders.status_id=5而不是backup_orders.status_id NOT IN (0, 1, 4, 6, 13, 14)不是更好嗎

如果您檢查編輯中的條件,則日期比較無關緊要......

AND
(
  backup_orders.status_id NOT IN (0,1,4,6,13,14)
  OR
  (
    backup_orders.status_id = 5
    AND
    CONVERT_TZ( STR_TO_DATE( backup_orders.date_modified, '%a, %d %b %Y %T' ) , 'GMT', 'America/Chicago' )
    >=
    CONVERT_TZ(STR_TO_DATE("Thu, 11 Mar 2021 22:00:00 +0000", '%a, %d %b %Y %T') , "GMT", "America/Chicago")
  )
)

如果status_id為5,則第一個條件為True; 5 NOT IN該列表中。

然后,無論第二個或第三個條件是什么, TRUE OR (X AND Y)的結果都是 True,無論 X 或 Y 是什么。

因此,您需要將 5 添加到您的列表中...

AND
(
  backup_orders.status_id NOT IN (0,1,4,5,6,13,14) -- added 5 here
  OR
  (
    backup_orders.status_id = 5
    AND
    CONVERT_TZ( STR_TO_DATE( backup_orders.date_modified, '%a, %d %b %Y %T' ) , 'GMT', 'America/Chicago' )
    >=
    CONVERT_TZ(STR_TO_DATE("Thu, 11 Mar 2021 22:00:00 +0000", '%a, %d %b %Y %T') , "GMT", "America/Chicago")
  )
)

現在,只有當日期比較也解析為 True 時,狀態 5 才能解析 True。

(請原諒錯別字,我是在手機上做的。)

暫無
暫無

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

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