我有一个包含这些数据的表格:
ID, Name, LastName, Date, Type
我必须在表中查询 ID 为 1 的用户。 获取该行,如果该用户的 Type 不为 2,则返回该用户,否则返回具有相同 LastName 和 Date 的所有用户。
最有效的方法是什么? 我所做的是:
query1 = SELECT * FROM clients where ID = 1
query2 = SELECT * FROM client WHERE LastName = %s AND Date= %s
我执行第一个查询
cursor.execute(sql)
rows = cursor.fetchall()
for row in rows:
if(row['Type'] ==2 )
cursor.execute(sql2(row['LastName'], row['Date']))
Save results
else
results = rows?
是否有更有效的方法使用连接来做到这一点? 例如,如果我只有左连接,我如何询问用户的类型是否为 2 ? 如果要返回多行,如何将它们分配给Python中的对象数组?
最佳答案
只需执行两个查询即可避免此处出现循环:
q1 = """
SELECT c.* FROM clients c where c.ID = 1
"""
q2 = """
SELECT b.* FROM clients b
JOIN (SELECT c.* FROM
clients c
c.ID = 1
AND
c.Type = 2) a
ON
a.LastName = b.LastName
AND
a.Date = b.Date
"""
然后您只需执行这两个查询即可获得所需的所有结果,而无需循环,因为您的循环将执行 n
个查询,其中 n
等于匹配的行数,而不是在一次连接中获取所有行数。没有更多细节作为最终结果所需的数据结构,因为您似乎只关心保存结果,这应该给您您想要的。
关于python - 如果不满足条件,则返回该用户的数据,否则另一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48978504/