Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: SQL > Помогите составить SQL запрос


Автор: rownong@yandex.ru 25.12.23, 15:31
Здравствуйте.
Помогите составить 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

Автор: rownong@yandex.ru 25.12.23, 19:56
Я с ошибками описал задачу. Извиняюсь.

В итоге получился такой запрос

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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;


user posted image

Автор: MIF 25.12.23, 23:11
В приведенном запросе LEFT JOIN работает как INNER JOIN. Надо перенести фильтр этой таблицы из WHERE to ON чтобы он работал как LEFT.

Автор: rownong@yandex.ru 26.12.23, 06:12
Цитата MIF @
В приведенном запросе LEFT JOIN работает как INNER JOIN. Надо перенести фильтр этой таблицы из WHERE to ON чтобы он работал как LEFT.

Могли бы написать как в итоге должно выглядеть? Я не программист.

Автор: Akina 26.12.23, 12:02
Запрос лучше оформить так (использование алиасов и WHERE IN делают его более читаемым):
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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'
            );

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)