MadMyche
Предложение в вашем запросе где order_date <> творог() собирается вернуть все детали продукта и заказа, кроме сегодняшних, потому что они не равны.
Ответ на этот вопрос состоит в том, чтобы сделать это больше или равно.
SELECT *
FROM product_table p
JOIN order_table o on p.p_id = o.p_id
WHERE order_date >= curdate() -- products and orders from today
Это будет, однако, по-прежнему содержать продукты, которые были проданы в прошлом. Поэтому следующее, что нужно сделать, - это добавить в
вложенный запрос убрать продукты из прошлого. Чтобы получить идентификаторы продуктов из прошлых продаж, будет
SELECT p_ID FROM order_table WHERE order_date < curdate()
и это будет добавлено в исходный запрос с помощью
НЕ В пункт об их удалении
SELECT *
FROM product_table p
JOIN order_table o on p.p_id = o.p_id
WHERE order_date >= curdate() -- Products and orders from today
AND p.p_id NOT IN ( -- remove products from the past
SELECT p_ID
FROM order_table
WHERE order_date < curdate()
)
Теперь этот запрос даст вам все детали продукта, но он также будет содержать все детали заказа. И если было несколько покупателей одного и того же продукта, они вернут несколько строк для одного и того же продукта. Если мы хотим уменьшить это, мы удалим оператор JOIN и будем работать с ним как с подзапросом.
SELECT *
FROM product_table p -- Products only, no order information
WHERE p.p_id IN ( -- Get Products sold today
SELECT p_ID
FROM order_table
WHERE order_date >= curdate()
)
AND p.p_id NOT IN ( -- Remove products from the past
SELECT p_ID
FROM order_table
WHERE order_date < curdate()
)