Соединение между таблицами в Poco SQLite

Хотя SQLite поддерживает реляционные базы данных, я не уверен, что это реализовано в библиотеке Poco. Модульные тесты из poco-1.6.0-all/Data/SQLite/testsuite/src/SQLiteTest.cpp, кажется, не имеют примера, и я нигде не смог найти четкого подтверждения того, что это возможно.

В их примере из http://pocoproject.org/docs/00200-DataUserManual.html есть простой выбор после имени:

std::string aName;
std::string match("Peter");
ses << "SELECT name FROM names WHERE name=?", into(aName), use(match), now;

Допустим, я хочу увидеть компанию, в которой работает Питер, из другой таблицы, содержащей описания компаний, с учетом идентификатора компании:

// Untested
std::string aName;
std::string aCompany;
std::string match("Peter");
ses << "SELECT name, company_name FROM names, companies WHERE name=? AND company_id=2", 
    into(aName), into(aCompany), use(match), now;

Как я могу это сделать?


person Alexandru Irimiea    schedule 23.08.2015    source источник


Ответы (1)


Это вопрос SQL; вот как это сделать с POCO:

Session tmp (Poco::Data::SQLite::Connector::KEY, "dummy.db");

tmp << "DROP TABLE IF EXISTS Simpsons", now;
tmp << "DROP TABLE IF EXISTS Companies", now;
tmp << "CREATE TABLE IF NOT EXISTS Simpsons (LastName VARCHAR, FirstName VARCHAR)", now;
tmp << "CREATE TABLE IF NOT EXISTS Companies (CompanyName VARCHAR, LastName VARCHAR, FirstName VARCHAR)", now;

tmp << "INSERT INTO Simpsons VALUES(?, ?)", bind("Simpson"), bind("Bart"), now;
tmp << "INSERT INTO Simpsons VALUES(?, ?)", bind("Simpson"), bind("Homer"), now;

tmp << "INSERT INTO Companies VALUES(?, ?, ?)", bind("Microsoft"), bind("Simpson"), bind("Bart"), now;
tmp << "INSERT INTO Companies VALUES(?, ?, ?)", bind("Oracle"), bind("Simpson"), bind("Homer"), now;

std::string fname, lname, cname;
tmp << "SELECT P.FirstName, P.LastName, C.CompanyName "
        "FROM Simpsons P, Companies C "
        "WHERE P.FirstName = ? AND P.FirstName = C.FirstName", bind("Bart"), into(fname), into(lname), into(cname), now;

std::cout << lname << ',' << fname << " works for " << std::endl;

И вывод:

Симпсон, Барт работает в Microsoft

person Alex    schedule 10.11.2015
comment
Действительно, это вопрос SQL, однако я хотел подтвердить, что реализация POCO SQLite работает должным образом, поскольку я не видел никакой зависимости от известной внешней библиотеки SQLite (например, SQLite C), когда я компилировал библиотеки POCO, но вместо этого я думаю, что логика полностью реализована в POCO. - person Alexandru Irimiea; 10.11.2015
comment
SQLite встроен в POCO. - person Alex; 10.11.2015