簡體   English   中英

選擇語句中的三元運算符

[英]Ternary operator in select statement

我試圖執行一個查詢,該查詢在select語句中具有三元運算符:

SELECT id, 
       memory_id, 
       CASE 
         WHEN word_to =? THEN word_from 
         ELSE word_to 
       end 
FROM   translations 
WHERE  word_to =? 
       OR word_from =? 

如何使用QueryBuilder對象構建這樣的查詢? 我試過了:

public List<Translation> findMeanings(long wordId) {

    try {
        Dao<Translation, Long> translations = getDao(Translation.class);
        QueryBuilder<Translation, Long> queryBuilder = translations.queryBuilder();
        String id = Long.toString(wordId);

        queryBuilder.selectRaw(DBColumns.ID, DBColumns.MEMORY_ID, "CASE WHEN word_to="+id+" THEN word_from ELSE word_to END");
        queryBuilder.where().eq(DBColumns.WORD_TO, id).or().eq(DBColumns.WORD_FROM, id);

        return queryBuilder.query();
    } catch (SQLException e) {
        Logger.error("db", e.getMessage(), e);
    }
    return new ArrayList<Translation>();
}

但我得到一個例外:

由於調用者需要SELECT語句,因此無法編譯此SELECT_RAW語句。 檢查您的QueryBuilder方法。

翻譯班:

@DatabaseTable(tableName = DatabaseTables.TABLE_TRANSLATIONS)
public class Translation extends BaseEntity {

    @DatabaseField(foreign = true, foreignColumnName = DBColumns.ID, columnName = DBColumns.WORD_TO)
    private Word wordTo;
    @DatabaseField(foreign = true, foreignColumnName = DBColumns.ID)
    private Memory memory;
    //...

其中BaseEntity是:

public class BaseEntity {

    @DatabaseField(generatedId = true, unique = true)
    protected long id; 
    //....

由於調用者需要SELECT語句,因此無法編譯此SELECT_RAW語句。 檢查您的QueryBuilder方法。

調用qb.selectRaw(...)您將需要使用qb.queryRaw(...)而不是query() 這在javadocs中提到selectRaw(...)

將原始列或聚合函數(COUNT,MAX,...)添加到查詢中。 這會將查詢轉換為僅適用於Dao.queryRaw(String,String ...)類型的語句的查詢。 可以多次調用此操作以添加更多列以供選擇。

通常, selectRaw(...)與某種聚合函數(例如COUNT()MAX() ,因此與query()返回的實體類型不兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM