SQLite从三个表中选择变量匹配

时间:2017-01-05 16:27:37

标签: python sql database sqlite

SQL查询初学者,显然。

所以我有3个数据表:账户,所有者,车辆。

这三个用一个公共变量绑定在一起:“User_Name”。

我想从这三个表中获取User_Name与我的搜索变量匹配的所有项目。因此,如果我搜索具有User_Name的用户:“Mike”将显示来自具有User_Name“Mike”的三个表中的所有项目。

我使用常规“JOIN”进行以下查询,但是如何更改此选项以使用搜索变量来选择与所有表中的变量匹配的ALL?

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

我已经查看了其他各种关于“从多个表中选择”的Stack-threads,但是所有这些都只从2个表中选择,而从3中选择的表没有我想要的变量匹配。

简而言之:

搜索三个表并获取公共列变量与搜索字符串匹配的所有行。

1 个答案:

答案 0 :(得分: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'

以上查询将过滤包含搜索Account的表User_Name中的所有记录。连接将匹配其他表中具有匹配连接条件的记录。

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