Если условие не выполняется, вернуть данные для этого пользователя, иначе другой запрос

0

У меня есть таблица с этими данными:

  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?

  • 0
    есть ли причина, по которой вы удалили другой вопрос? тот же вопрос был задан под другим именем, и я дал ответ, показывающий, как это сделать с объединениями.
  • 0
    @eagle У меня, по-видимому, запланировано удаление аккаунта, прошу прощения. Я ответил на ваш комментарий, потому что я не объяснил, что мне нужно. Но спасибо! Это было очень полезно, так как я понял, что мои запросы изначально были неправильными.
Показать ещё 4 комментария
Теги:
pymysql

1 ответ

0

Задайте два запроса, чтобы избежать циклов:

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 равно количеству строк, которые соответствуют, а не хватают все это в одно соединение за один проход. Без каких-либо специфических особенностей в качестве желаемой структуры данных конечных результатов, поскольку, по-видимому, вы заботитесь только о сохранении результатов, это должно дать вам то, что вы хотите.

  • 0
    Но если тип не равен 2, то второй запрос вообще не нужно выполнять. Будет ли этот путь выполнен и не даст результатов?
  • 0
    если нет никого с типом 2, то он не вернет ни одной строки, но это более эффективно, чем циклический просмотр каждой строки, база данных сделает это намного быстрее, чем цикл python
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню