【问题标题】:sqlite android select col(x) where (col1 like '%key%') or (col2 like '%key%') - and x is columnt containing keysqlite android select col(x) where (col1 like '%key%') or (col2 like '%key%') - 并且 x 是包含键的列
【发布时间】:2013-11-12 20:23:48
【问题描述】:

我需要这样的sql语句:

select col(x) where (col1 like '%key%') or (col2 like '%key%') or .... - x 是包含键(模式)的列。

更准确地说,我有一个包含文本列 col1、col2、col3、col4 等的表格。

现在我想在所有这些列中找到给定的模式(如)。但是,作为选择的结果,我想获取找到模式的列内容(在我的“声明”中,我将其标记为 col(x)。

悬而未决的问题是,如果同一语句的两列或多列包含相同的模式怎么办。然后,例如,我可以得到 col(x), col(y) 之类的东西,但这不是必须的。欢迎任何其他合理的解决方案。

问题是我需要这样的语句怎么写?

提前感谢您的帮助。

【问题讨论】:

    标签: android sql sqlite select


    【解决方案1】:

    您可以使用CASE expression 来搜索该列:

    SELECT CASE WHEN col1 LIKE :pattern THEN col1
                WHEN col2 LIKE :pattern THEN col2
                ...
           END AS colx
    FROM MyTable
    WHERE col1 LIKE :pattern OR col2 LIKE :pattern OR ...
    

    【讨论】:

    • 非常感谢。但是我想知道效率,因为实际上每列都会“执行”两次。
    • 还有一件事,是否可能只有一个?,然后在使用 SQLiteDatabase.rawQuery 时,我将不得不添加这么多参数......(好吧,我可以在创建字符串时使用sql语句,但我想知道是否有更优雅的解决方案)?
    • CASE只会对实际匹配的记录执行,数据库性能主要取决于I/O量。
    猜你喜欢
    • 2016-12-05
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    相关资源
    最近更新 更多