【问题标题】:OR Operation in JOINS SQL(MYSQL)JOINS SQL(MYSQL) 中的 OR 操作
【发布时间】:2015-05-06 21:59:32
【问题描述】:

我正在使用 MYSQL

SELECT m.proposalId, m.title, n.stageNumber, n.committeeId, n.modifiedDate, o.msNumber , o.description,o.ics,o.edition FROM mystands_Proposal m 
INNER join  
    mystands_ProjectLifecycle n on m.proposalId = n.proposalId 
INNER join  
    mystands_Project o on m.proposalId = o.proposalId 
WHERE 
    n.newState=0  AND n.committeeId=79827 AND (n.assignedTo=29913 OR n.actionBy=29913) AND n.proposalId LIKE '%sdas%' AND o.projectNumber LIKE '%sdass%' AND n.stageNumber=40.92 AND o.category=1 AND o.degreeofCorrespondence=1 AND o.msNumber LIKE '%sdas%' AND (n.modifiedDate <='2015-05-15' AND n.stageNumber=40.2) AND (n.modifiedDate <='2015-05-07' AND n.stageNumber=30.99) AND (n.modifiedDate <='2015-05-27' AND n.stageNumber=55.99)

我对三个表进行内部连接以实现搜索功能,如果用户输入值,则在 java 中将值附加到运行中的 sql 查询上面的代码适用于字段之间的 AND 操作。

如何对用户输入的字段进行“或”运算并显示结果 其实如果我试过这个

SELECT m.proposalId, m.title, n.stageNumber, n.committeeId, n.modifiedDate, o.msNumber , o.description,o.ics,o.edition FROM mystands_Proposal m 
INNER join  
    mystands_ProjectLifecycle n on m.proposalId = n.proposalId 
INNER join
    mystands_Project o on m.proposalId = o.proposalId  
WHERE 
    n.newState=0      OR n.committeeId=80246 OR (n.assignedTo=79977 OR n.actionBy=79977) OR n.proposalId LIKE '%ads%' OR o.projectNumber LIKE '%sds%' OR n.stageNumber=30.99 OR o.category=1 OR o.degreeofCorrespondence=1 OR o.msNumber LIKE '%sadsa%' OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=40.2) OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=30.99) OR (n.modifiedDate <='2015-05-29' AND n.stageNumber=55.99) 

现在正在发生的事情是它给了我内部联接的结果,因为 newState=0 是真的,并且在条件变得真实的情况下是完整的,并且正在三个表上获得内部联接的结果,并且结果没有按照需要被过滤

你能帮忙看看哪里出错了吗 谢谢

【问题讨论】:

  • 您需要将括号放在正确的位置以获得您想要的逻辑。鉴于您在文本中的描述,目前尚不清楚为什么您的 where 条件不是您真正想要的。
  • 嗨,Gordon,如果用户在搜索表单中输入值,则将其附加到 newState=0 之后的 where 子句中

标签: mysql sql join


【解决方案1】:

如果你得到了一切,因为 newstate = 0 总是正确的,那么你只需要输入这个,如果我误解了,那么我很抱歉,但这似乎是我理解的问题:

“因为 newState=0 为真,且条件为真”

n.newState=0 AND (n.committeeId=80246 OR (n.assignedTo=79977 OR n.actionBy=79977) OR n.proposalId LIKE '%ads%' OR o.projectNumber LIKE '%sds%' OR n.stageNumber=30.99 OR o.category=1 OR o.degreeofCorrespondence=1 OR o.msNumber LIKE '%sadsa%' OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=40.2) OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=30.99) OR (n.modifiedDate <='2015-05-29' AND n.stageNumber=55.99))

在您的代码中某处记录您添加了多少 where 条件,如果它大于 0,则添加 'AND ( ...... ),因为我不知道生成此查询的代码是什么看来我帮不了你了

【讨论】:

    【解决方案2】:
    WHERE 
    n.newState=0
        AND (
        n.committeeId=80246 OR (n.assignedTo=79977 OR n.actionBy=79977) OR n.proposalId LIKE '%ads%' OR o.projectNumber LIKE '%sds%' OR n.stageNumber=30.99 OR o.category=1 OR o.degreeofCorrespondence=1 OR o.msNumber LIKE '%sadsa%' OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=40.2) OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=30.99) OR (n.modifiedDate <='2015-05-29' AND n.stageNumber=55.99)
        )
    

    【讨论】:

      【解决方案3】:

      不清楚你的目标是什么。如果您可以向 sqlfiddle 提供数据样本和预期结果,那将有很大帮助。

      一般来说,根据我的经验,通常你应该有类似的东西:

      SELECT 
        m.proposalId, m.title, 
        n.stageNumber, n.committeeId, n.modifiedDate, 
        o.msNumber , o.description,o.ics,o.edition 
      FROM mystands_Proposal m 
      INNER join  
          mystands_ProjectLifecycle n 
      ON m.proposalId = n.proposalId 
         AND n.newState=0
         AND ( n.committeeId=80246 
              OR n.assignedTo=79977 
              OR n.actionBy=79977
              OR n.proposalId LIKE '%ads%'
              OR n.stageNumber=30.99
              OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=40.2) 
              OR (n.modifiedDate <='2015-05-22' AND n.stageNumber=30.99) 
              OR (n.modifiedDate <='2015-05-29' AND n.stageNumber=55.99)
         )
      INNER join
          mystands_Project o 
      ON m.proposalId = o.proposalId  
         AND ( o.projectNumber LIKE '%sds%' 
              OR o.category=1
              OR o.degreeofCorrespondence=1 
              OR o.msNumber LIKE '%sadsa%')
      

      【讨论】:

        猜你喜欢
        • 2016-09-09
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-30
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        相关资源
        最近更新 更多