Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.34.80] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Здравствуйте.
Помогите составить SQL запрос чтобы я могу его исполнить в PhpMyAdmin. SQL-ЗАПРОС: Из таблицы "4_2_products_from_orders_yandex_market" выбрать все записи в которых (status_application = " 2.1. Товар в зарезервирован на 3 дня" или " "2.2. Товар в зарезервирован на 7 дней") и поле "order_sima_land"=0 Связь по полю "order_sima_land с таблицей 11_3_orders_yandex_market_from_shipments" И в таблице "11_3_orders_yandex_market_from_shipments" поле Поле "number_shipment" = 44713430 |
Сообщ.
#2
,
|
|
|
Я с ошибками описал задачу. Извиняюсь.
В итоге получился такой запрос SELECT * FROM 4_2_products_from_orders_yandex_market JOIN 11_3_orders_yandex_market_from_shipments ON 4_2_products_from_orders_yandex_market.order_number = 11_3_orders_yandex_market_from_shipments.number_order_yandex_market LEFT JOIN 4_3_status_yandex_market ON 11_3_orders_yandex_market_from_shipments.number_order_yandex_market = 4_3_status_yandex_market.number_order_yandex_market AND 4_3_status_yandex_market.status = 'CANCELLED' WHERE (4_2_products_from_orders_yandex_market.status_application = '2.1. Товар в зарезервирован на 3 дня' OR 4_2_products_from_orders_yandex_market.status_application = '2.2. Товар в зарезервирован на 7 дней') AND 4_2_products_from_orders_yandex_market.order_sima_land = 0 AND 4_3_status_yandex_market.number_order_yandex_market IS NULL AND 11_3_orders_yandex_market_from_shipments.number_shipment = 44659422; |
Сообщ.
#3
,
|
|
|
В приведенном запросе LEFT JOIN работает как INNER JOIN. Надо перенести фильтр этой таблицы из WHERE to ON чтобы он работал как LEFT.
|
Сообщ.
#4
,
|
|
|
Цитата MIF @ В приведенном запросе LEFT JOIN работает как INNER JOIN. Надо перенести фильтр этой таблицы из WHERE to ON чтобы он работал как LEFT. Могли бы написать как в итоге должно выглядеть? Я не программист. |
Сообщ.
#5
,
|
|
|
Запрос лучше оформить так (использование алиасов и WHERE IN делают его более читаемым):
SELECT t1.*, t2.* FROM 4_2_products_from_orders_yandex_market AS t1 JOIN 11_3_orders_yandex_market_from_shipments AS t2 ON t1.order_number = t2.number_order_yandex_market LEFT JOIN 4_3_status_yandex_market AS t3 ON t2.number_order_yandex_market = t3.number_order_yandex_market AND t3.status = 'CANCELLED' WHERE t1.status_application IN ('2.1. Товар в зарезервирован на 3 дня', '2.2. Товар в зарезервирован на 7 дней') AND t1.order_sima_land = 0 AND t2.number_shipment = 44659422 AND t3.number_order_yandex_market IS NULL; Но лучше использовать NOT EXISTS: SELECT * FROM 4_2_products_from_orders_yandex_market AS t1 JOIN 11_3_orders_yandex_market_from_shipments AS t2 ON t1.order_number = t2.number_order_yandex_market WHERE t1.status_application IN ('2.1. Товар в зарезервирован на 3 дня', '2.2. Товар в зарезервирован на 7 дней') AND t1.order_sima_land = 0 AND t2.number_shipment = 44659422 AND NOT EXISTS ( SELECT NULL FROM 4_3_status_yandex_market AS t3 WHERE t2.number_order_yandex_market = t3.number_order_yandex_market AND t3.status = 'CANCELLED' ); |