如何将 WHERE 用于多个不同的列?
How can I use WHERE with multiple different columns?
在 SQlite3 语句中尝试查询 AND 和 OR 时遇到问题。
有什么方法可以让我做类似的事情
WHERE section = ? AND LEVEL =? AND subj1 =? AND subj2=? AND subj3 =?
根据我在这一行中看到的内容
SELECT * FROM students WHERE section = ? AND level =? AND subj1 = ? OR subj2 = ? OR subj3 =?
它不会工作,因为在 'AND subj1 =?' 之后,SQlite3 现在选择 select subj2 和 subj3 的任何主题,完全忽略部分和级别列。
如何获得与我想要的部分、级别和主题相匹配的行?
这是我的代码
query = ("""SELECT * FROM students WHERE section = ? AND level =? AND subj1 = ? OR subj2 = ? OR subj3 =?"""
c.execute(query, (variable1, variable2, variable3, variable4, variable5, ))
rows = c.fetchall()
print (rows)
这是一个示例 table
Name Section Level Subject 1 Subject 2 Subject 3
John | 1 | 1 | Math | Science | English
Mary | 1 | 1 | Math | Science | English
Dave | 2 | 2 | English | History | Math
Joe | 2 | 2 | English | History | Math
使用括号:
WHERE section = ? AND level =? AND
(subj1 = ? OR subj2 = ? OR subj3 = ?)
假设最后三个参数相同,您可以使用 IN
简化此操作:
WHERE section = ? AND level =? AND
? IN (subj1, subj2, subj3)
通常 IN
在 IN
列表中有常量,列名作为左操作数。但是,这不是必需的。
OR
的逻辑优先级低于 AND
。要执行您想要的操作,您需要用括号将 OR
ed 谓词括起来:
SELECT *
FROM students
WHERE section = ? AND level = ? AND (subj1 = ? OR subj2 = ? OR subj3 =?)
不过,这里用起来更简单 IN
:
SELECT *
FROM students
WHERE section = ? AND level = ? AND ? IN (subj1, subj2, subj3)
在 SQlite3 语句中尝试查询 AND 和 OR 时遇到问题。
有什么方法可以让我做类似的事情
WHERE section = ? AND LEVEL =? AND subj1 =? AND subj2=? AND subj3 =?
根据我在这一行中看到的内容
SELECT * FROM students WHERE section = ? AND level =? AND subj1 = ? OR subj2 = ? OR subj3 =?
它不会工作,因为在 'AND subj1 =?' 之后,SQlite3 现在选择 select subj2 和 subj3 的任何主题,完全忽略部分和级别列。 如何获得与我想要的部分、级别和主题相匹配的行?
这是我的代码
query = ("""SELECT * FROM students WHERE section = ? AND level =? AND subj1 = ? OR subj2 = ? OR subj3 =?"""
c.execute(query, (variable1, variable2, variable3, variable4, variable5, ))
rows = c.fetchall()
print (rows)
这是一个示例 table
Name Section Level Subject 1 Subject 2 Subject 3
John | 1 | 1 | Math | Science | English
Mary | 1 | 1 | Math | Science | English
Dave | 2 | 2 | English | History | Math
Joe | 2 | 2 | English | History | Math
使用括号:
WHERE section = ? AND level =? AND
(subj1 = ? OR subj2 = ? OR subj3 = ?)
假设最后三个参数相同,您可以使用 IN
简化此操作:
WHERE section = ? AND level =? AND
? IN (subj1, subj2, subj3)
通常 IN
在 IN
列表中有常量,列名作为左操作数。但是,这不是必需的。
OR
的逻辑优先级低于 AND
。要执行您想要的操作,您需要用括号将 OR
ed 谓词括起来:
SELECT *
FROM students
WHERE section = ? AND level = ? AND (subj1 = ? OR subj2 = ? OR subj3 =?)
不过,这里用起来更简单 IN
:
SELECT *
FROM students
WHERE section = ? AND level = ? AND ? IN (subj1, subj2, subj3)