![](/img/trans.png)
[英]How can I join two tables, keeping rows that do not meet the JOIN condition?
[英]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.