2015-04-04 4 views
1

У меня есть две таблицы. В этих таблицах мой идентификатор остановки может находиться в одном из них или в обоих из них. Если мой идентификатор остановки не существует в B, он должен выбрать из A. И если он не существует в A, он должен выбрать из B. И если в обеих таблицах существует стоп-идентификатор, я хочу отдать приоритет B и получить строку из B. Ниже запрос всегда возвращает значение из B. Можете ли вы помочь мне исправить это?Как отдать предпочтение одной таблице в Sqlite

String selectQuery = "SELECT " 
    + stop_id + "," 
    + name + "," 
    + latitude + "," 
    + longitude + "," 

    +"1 as "+priority 
    +" FROM "+ A 

    +" UNION SELECT " 
    + stop_id + "," 
    + name + "," 
    + latitude + "," 
    + longitude + "," 
    +"2 as "+priority 
    +" FROM "+ B 
    +" WHERE " + stop_id + " =? " 
    +" ORDER BY "+priority 
    +" LIMIT 1 "; 


    Cursor cursor = db.rawQuery(selectQuery, new String[] {id}); 

ответ

1

В вашей UNION ALL следует применять пункт WHERE к обоим SELECT с; ваш текущий код применяет условие только к стороне B, а сторона A возвращает все строки. LIMIT 1 в конце скрывает эту проблему.

Объединение строк не делает его легко увидеть, но вы должны быть прохождение id дважды, и с помощью двух ? заполнителей в запросе:

SELECT stop_id, name, latitude, longitude, 1 as priority 
FROM A 
WHERE stop_id = ? 
UNION ALL 
SELECT stop_id, name, latitude, longitude, 2 as priority 
FROM B 
WHERE stop_id = ? 
ORDER BY priority DESC 
LIMIT 1 
+0

Я просто понял, что, и пришел, чтобы сказать это, но спасибо за ваш ответ. знак равно –

Смежные вопросы