Вложенные операторы в sqlite
Я использую библиотеку sqlite3 в C++ для запроса базы данных из файла *.sqlite. Вы можете написать запрос в sqlite3, например:
char* sql = "select name from table id = (select full_name from second_table where column = 4);"
Второй оператор должен возвращать идентификатор, чтобы завершить оператор запроса первым оператором.
2 ответа
Да, вы можете, просто убедитесь, что вложенный запрос не возвращает более одной строки. Добавьте LIMIT 1 в конец вложенного запроса, чтобы исправить это. Также убедитесь, что он всегда возвращает строку, иначе основной запрос не будет работать.
Если вы хотите сопоставить несколько строк во вложенном запросе, то вы можете использовать либо IN
, вот так:
char* sql = "select name from table WHERE id IN (select full_name from second_table where column = 4);"
или вы можете использовать JOIN
:
char* sql = "select name from table JOIN second_table ON table.id = second_table.full_name WHERE second_table.column = 4"
Обратите внимание, что IN
метод может быть очень медленным, и это JOIN
может быть очень быстрым, если индексировать по правым столбцам
В sidenote вы можете использовать SQLiteadmin ( http://sqliteadmin.orbmu2k.de/) для просмотра базы данных и выполнения запросов непосредственно в ней (полезно для тестирования и т. Д.).