В настоящее время у меня есть таблица items
, которая содержит столбец id
. У меня также есть таблица stores
, которая также содержит столбец id
. Наконец, у меня есть таблица соединений store_items
, которая содержит item_id
и store_id
внешних ключей. Эта таблица объединяет элементы в магазины, в которые они доступны.Создание/рефакторинг sql-запроса
Мне нужен способ получить: либо элемент по id, либо переменная itemId имеет значение null, чтобы получить все элементы, доступные в магазине, и если переменная storeId имеет значение null, чтобы получить все элементы.
В настоящее время у меня есть это, что полная неразбериха:
SELECT DISTINCT i.id
FROM items AS i JOIN store_items AS si ON ITEMVAR IS NULL
AND (
(STOREVAR IS NULL OR si.store_id = STOREVAR)
AND i.id = si.item_id
)
OR i.id = ITEMVAR;
Это лучше практика, чтобы просто отделить различные запросы, или есть способ восстановить фактор это?
Отдельных запросы. Их смятие заслоняет намерение и ничего не добавляет. – Dmitri
Кстати, каково желаемое поведение, если запрос имеет как 'item_id', так и' store_id', но этот элемент недоступен в этом магазине? – Dmitri
@Dmitri В идеале, чтобы вернуть пустой массив, чтобы было легко проверить, существует ли элемент в хранилище – PaulOlteanu