2010-02-13 72 views
0

我正在使用C++中的sqlite3库从* .sqlite文件中查询数据库。你可以写在sqlite3的像一个查询语句:sqlite中的嵌套语句

char* sql = "select name from table id = (select full_name from second_table where column = 4);" 

第二条语句应该返回一个id完成与第一条语句的查询语句。

回答

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可以非常快,如果你在右边的列索引

+0

添加一个LIMIT 1可能会掩盖其他错误;也许他的查询只能返回一行。如果没有,你可能想要(!)一个错误。 – Joe 2010-02-13 02:05:35

+0

它从表匹配列4返回'full_name'。我想我需要使用类似for循环来获取每个'full_name'。 – cpx 2010-02-13 02:39:18

+0

+1,它工作:) – cpx 2010-02-13 03:09:53

1

O在旁注中,您可以使用SQLiteadmin(http://sqliteadmin.orbmu2k.de/)查看数据库并直接在其中进行查询(对于测试等有用)。