2017-01-05 21 views
0

SQL查询初学者,显然。SQLite从三个表中选择变量匹配

所以我有3个数据表:帐户,所有者,车辆。 “USER_NAME”:

这三个与公共变量绑在一起。

我想从三个表格其中用户名我的搜索匹配变量的所有项目。因此,如果我使用User_Name搜索用户:“Mike”,将显示User_Name为“Mike”的三个表中的所有项目。

我一直在使用一般的“加入”下面的查询,但我怎样才能改变这种使用搜索变量来选择相匹配的所有表变量呢?

cursor.execute("SELECT * FROM Account JOIN Owner ON(Account.User_Name = Owner.User_Name) JOIN Vehicle ON(Account.User_Name = Vehicle.User_Name)") 

我已经看过其他各种堆栈线程关于“从多个表中选择”但他们都只是从2个表和3选择那些选择,没有我想要的变量匹配。

因此,在短期:

搜索三个表,并得到其中一个共同的列变量的搜索字符串匹配的所有行。

+0

的可能的复制[如何从多个表的SQL查询返回的数据(http://stackoverflow.com/questions/12475850/how-can-an-sql-query-return-data-from-multiple-tables ) – MooingRawr

+0

也许这个问题的答案将帮助:http://stackoverflow.com/questions/35470590/sql-select-of-data-from-three-tables-relationed?rq=1 – igneosaur

+0

添加'WHERE Account.User_Name = %s',并替换搜索名称。 – Barmar

回答

0

由于您的标签指示的Python,我将展示使用Python的答案,假设search_user变量保存我们要搜索用户名:

cursor.execute("SELECT * FROM Account JOIN Owner ON(Account.User_Name = Owner.User_Name) JOIN Vehicle ON(Account.User_Name = Vehicle.User_Name) WHERE Account.User_Name='%s'" % search_user) 

事情是比较明显的,如果我们只是提取SQL和在一个更可读的格式格式化:

SELECT * 
    FROM Account 
    JOIN Owner ON (Account.User_Name = Owner.User_Name) 
    JOIN Vehicle ON (Account.User_Name = Vehicle.User_Name) 
WHERE Account.User_Name='%s' 

上面的查询将包含搜索User_NameAccount筛选所有记录。连接将匹配具有匹配连接条件的其他表中的记录。

请注意,如果您没有User_Name匹配任何表中的搜索值,则结果中不会显示任何记录。例如,有一个在表AccountUser_Name = 'Joe'的记录,但在表Vehicle'Owner'没有记录'Joe'。结果将不会有'Joe'的记录。

+0

啊,所以我只需要在最后添加一个“WHERE”子句。在问这个问题之前,我尝试了这个解决方案,但我想我必须得到一个不正确的语法。这解决了我的问题。谢谢! – DannyBoy