【问题标题】:MySQL find out which WHERE clause was used in select statementMySQL找出在select语句中使用了哪个WHERE子句
【发布时间】:2018-09-02 09:31:51
【问题描述】:

我的where 子句中有多个... or ... 连接条件的select 语句(下图)(即将成为30+ or 条件)

我想要做的是有一个列告诉我where 子句中的哪个or 被触发。

这可能吗?

我尝试过搜索,但我似乎碰壁了。任何建议或正确方向的观点将不胜感激。谢谢

select
    Details_TransactionDate as Transaction_Date,
    Details_Credit as Credit,
    MSD.TicketNo as Ticket_Number,
    Details_Pn as Description,
    MSD.Nun as Numbers
from
    MS_Transactions MST
    left join MBS_Details as MSD on MST.TicketNo = MSD.TicketNo
where 
    Details_Pn like '%SALARY%'
    or Details_Pn like '%Mid MTH%'
    or Details_Pn like '%Mid Month%'
    or Details_Pn like '%Pay%'
    or Details_PNarration like '%SAL%'  
        and day(Details_TransactionDate) between 23 and 25
        and weekday(Details_TransactionDate) Between 0 and 4;

【问题讨论】:

  • “触发”以什么方式?您的意思是为什么包含结果中的一行?如果是这样,您可以在选择中添加一堆额外的表达式,例如:Details_Pn like '%SALARY%' AS passed_condition_1此外,您可能希望在 where 子句中使用括号强制/指示所需的评估(即使依赖于优先规则。)

标签: mysql select where-clause


【解决方案1】:

为避免混淆,您应该在 OR 周围使用正确的 () 并为每一列使用适当的表格别名 并且您可以使用 CASE 来了解使用了哪个 OR

Select 

    MST.Details_TransactionDate as Transaction_Date,
    MST.Details_Credit as Credit,
    MSD.TicketNo as Ticket_Number,
    MST.Details_Pn as Description,
    MSD.Nun as Numbers,
    case 
      WHEN MST.Details_Pn like '%SALARY%' THEN 'Details_Pn SALARY'
      WHEN MST.Details_Pn like '%Mid MTH%' THEN 'Details_Pn Mid MTH'
      WHEN MST.Details_Pn like '%Mid Month%' THEN 'Details_Pn Mid Month'          
      WHEN MST.Details_Pn like '%Pay%' THEN 'Details_Pn Pay'
      WHEN MST.Details_PNarration like %SAL%' THEN 'Details_PNarrationSAL'
    end or_used 

from MS_Transactions MST
Left join MBS_Details as MSD on MST.TicketNo = MSD.TicketNo

where  ( MST.Details_Pn like '%SALARY%'
OR MST.Details_Pn like '%Mid MTH%'
OR MST.Details_Pn like '%Mid Month%'
OR MST.Details_Pn %Pay%
OR MST.Details_PNarration like '%SAL%'  ) 
AND DAY(MST.Details_TransactionDate) between '23' and '25' and 
    WEEKDAY(MST.Details_TransactionDate) Between 0 and 4;

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2015-02-23
    相关资源
    最近更新 更多