2010-09-14 4 views
1

Я хочу выполнить следующий запрос в базе данных SQliteDatabase моего приложения .SQLite: вопрос сравнения «IN»

String sql = "Select col_1,row_id from Table1 where row_id IN(Select 
row_id from Table2 where key = 'key')"; 

Я использую rawQuery функцию SQLiteDataBase класса для же. Проблема заключается в том, когда внутренний запрос возвращает 0 объектов, запрос запускает и возвращает 0 результатов. Но когда внутренний запрос возвращает Set, запрос не выполняется.

Можем ли мы иметь вложенные запросы, подобные этим в rawQuery? Что я здесь ?

Пожалуйста, помогите.

Спасибо.

ответ

1

Почему вы не используете соединение?

SELECT Table1.col_1, Table1.row_id FROM Table1 JOIN Table2 ON Table1.row_id = Table2.row_id WHERE key = 'key'; 
+0

Я не очень разбираюсь в базах данных, поэтому, пожалуйста, извините мое невежество. У меня есть два вопроса: 1. Являются ли JOINs лучше, чем вложенные запросы с точки зрения пространства и памяти? 2. Любая идея, почему вышеупомянутый запрос не работает на Android? Я попробовал его в браузере SQlite Database, и он работает. – Samuh

+0

Базы данных обычно оптимизированы для запуска JOIN. Внутри большинство оптимизаторов запросов преобразуют ваш вложенный запрос в соединение. Без какого-либо сообщения об ошибке я не могу сказать, почему он не работает, когда подзапрос возвращает набор. Синтаксис правильный! – halfdan

+0

+10. спасибо за ответ! – Samuh