SQL создать запрос на выборку с возможными пустыми критериями

Рейтинг: 1Ответов: 2Опубликовано: 19.02.2023
SELECT * FROM Сорта WHERE Морозоустойчивость = 'Высокая' AND Урожайность = 'Средняя'

Нужно сделать выборку по определённым критериям, вводимых юзером. Суть в том, что критерий может быть и пустым. Например Урожайность = '', и нужно будет вывести выборку только по Морозоустойчивости.

Ответы

▲ 2Принят

Добавьте условие с проверкой введенных переменных в запросе на ''. Тогда, проверка будет выполняться если их значение задано

Вместо :morozoust и :urozh у вас должны быть реальные значения. Например, переданные через биндинг, либо явно вставленные в запрос

Пример:

SELECT * FROM Сорта 
WHERE
    (:morozoust = '' OR Морозоустойчивость = :morozoust)
    AND (:urozh = '' OR Урожайность = :urozh)
▲ 0

Тут надо использовать динамический запрос Можете попробовать использовать код ниже

import sqlite3

# установка соединения с базой данных
conn = sqlite3.connect('database.db')
cursor = conn.cursor()

# формирование запроса
query = "SELECT * FROM Сорта WHERE 1=1 "
params = []

morozoust = input("Введите морозоустойчивость (Высокая/Средняя/Низкая): ")
if morozoust != "":
    query += "AND Морозоустойчивость = ? "
    params.append(morozoust)

urozh = input("Введите урожайность (Высокая/Средняя/Низкая): ")
if urozh != "":
    query += "AND Урожайность = ? "
    params.append(urozh)

# выполнение запроса
result = cursor.execute(query, params).fetchall()

# вывод результатов
for row in result:
    print(row)

# закрытие соединения с базой данных
conn.close()