【问题标题】:SQL selecting all records with IN statementSQL 使用 IN 语句选择所有记录
【发布时间】:2014-12-16 14:07:11
【问题描述】:

在我的例子中,只有前 2 个参数是强制性的。当用户没有给出其余参数时,我在 LIKE 语句中使用字符“%”,以便显示所有数据。知道如何为 IN 语句解决这个问题吗?解决方案参数 IN ('%') 不起作用 => Null

参数:
java.sql.Timestamp、java.sql.Timestamp、java.lang.String、java.lang.String、java.lang.String、java.lang.String

查询:

SELECT * 
FROM RC_Recall t INNER JOIN RC_RECALLSTORE s ON t.ID = s.RECALLID
WHERE t.creationdate >= ?1 AND t.enddate <= ?2 AND  t.id LIKE ?3 
      AND t.afdeling IN (?4) AND s.storeid IN (?5)
ORDER BY ID DESC

【问题讨论】:

    标签: java sql sap portal webdynpro


    【解决方案1】:

    SQL 中的 IN 语句不能接受通配符。您必须在查询中添加 OR 才能使其正常工作...

    select * 
    from RC_Recall t INNER JOIN RC_RECALLSTORE s ON t.ID = s.RECALLID
    where t.creationdate >= ?1 
    AND t.enddate <= ?2 
    AND t.id LIKE ?3 
    AND ('%' = ?4 OR t.afdeling IN (?4))
    AND ('%' = ?5 OR s.storeid IN (?5))
    ORDER BY ID DESC
    

    如果您使用参数位置来传递参数,您可能必须将其更改为

    AND ('%' = ?4 OR t.afdeling IN (?5))
    AND ('%' = ?6 OR s.storeid IN (?7))
    

    希望有帮助

    【讨论】:

    • 比较谓词>>? = '%'
    • 所以应该是 '%' = ?4 和 '%' = ?5 代替吗?
    • 确实,它似乎工作了!谢谢也许你可以用正确的语法改变你的答案:-)
    【解决方案2】:

    相当硬编码查询,您可以根据输入动态构建查询。即,无论存在哪个输入,都只在 where 子句中添加那些条件。

    【讨论】:

    • 动态构建查询将强制数据库进行硬解析。这通常是不可取的。
    猜你喜欢
    • 2016-01-27
    • 2013-10-25
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    相关资源
    最近更新 更多