На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Помогите составить SQL запрос
    Здравствуйте.
    Помогите составить 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 -
      Я с ошибками описал задачу. Извиняюсь.

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

      ExpandedWrap disabled
        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
        В приведенном запросе LEFT JOIN работает как INNER JOIN. Надо перенести фильтр этой таблицы из WHERE to ON чтобы он работал как LEFT.
          Цитата MIF @
          В приведенном запросе LEFT JOIN работает как INNER JOIN. Надо перенести фильтр этой таблицы из WHERE to ON чтобы он работал как LEFT.

          Могли бы написать как в итоге должно выглядеть? Я не программист.
            Запрос лучше оформить так (использование алиасов и WHERE IN делают его более читаемым):
            ExpandedWrap disabled
              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:
            ExpandedWrap disabled
              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'
                      );
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0220 ]   [ 15 queries used ]   [ Generated: 27.04.24, 13:02 GMT ]