【问题标题】:SQLite Select from three tables where variable matchesSQLite 从变量匹配的三个表中选择
【发布时间】:2017-01-06 08:01:54
【问题描述】:

显然是 SQL 查询初学者。

所以我有 3 个包含数据的表:帐户、所有者、车辆。

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

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

我有以下使用通用“JOIN”的查询,但是如何更改它以使用搜索变量从所有表中选择与该变量匹配的所有?

    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 个表中选择的那些没有我想要的变量匹配。

简而言之:

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

【问题讨论】:

标签: python sql database sqlite


【解决方案1】:

由于您的标签指示 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,则结果中不会显示任何记录。例如,Account 表中有User_Name = 'Joe' 的记录,而Vehicle'Owner' 表中没有'Joe' 的记录。结果将没有'Joe' 的记录。

【讨论】:

  • 啊,所以我只需要在最后添加一个“WHERE”子句。我在问这个问题之前尝试了这个解决方案,但我想我的语法一定不正确。这解决了我的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2021-11-08
  • 1970-01-01
相关资源
最近更新 更多