У меня есть таблица с этими данными:
ID, Name, LastName, Date, Type
Я должен запросить таблицу для пользователя с идентификатором 1. Получить строку, если тип этого пользователя не равен 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?
Есть ли более эффективный способ сделать это с помощью Joins? Пример, если у меня есть только левое соединение, как я также спрошу, является ли тип пользователя 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
равно количеству строк, которые соответствуют, а не хватают все это в одно соединение за один проход. Без каких-либо специфических особенностей в качестве желаемой структуры данных конечных результатов, поскольку, по-видимому, вы заботитесь только о сохранении результатов, это должно дать вам то, что вы хотите.