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

Модераторы: Akina
  
> Выборка данных из связанной таблицы?
    Добрый день!

    Подскажите пожалуйста, как можно на основе связующих таблиц "colors_products" и "models_products" выбрать из таблицы "products"
    например все "iPhone SE", и например чёрного цвета?


    Справочник цветов, таблица "colors":

    1. White
    2. Black
    3. Red


    Справочник моделей, таблица "models":

    1. iPhone SE
    2. iPhone 14
    3. iPad Air


    Таблица содержащая все продукты "products":
    1. iPhone SE, Black
    2. iPad Air, Black
    3. iPhone SE, Red
    4. iPhone 14, Black


    Таблица "colors_products" содержит связи между "color_id <--> product_id"

    Таблица "models_products" содержит связи между "model_id <--> product_id"


    user posted image
      ExpandedWrap disabled
        select products.* from products
        join colors_products on colors_products.product_id = products.product_id
        join models_products on models_products.product_id = products.product_id
        join colors on colors.color_id = colors_products.color_id
        join models on models.model_id = models_products.model_id
        where colors.color_name='Black' and models.model_name='iPhone SE'


      Вот такой запрос даст тот же результат, но отработает чутка быстрее:

      ExpandedWrap disabled
        select products.* from products
        join colors_products on colors_products.product_id = products.product_id
        join models_products on models_products.product_id = products.product_id
        join colors on colors.color_id = colors_products.color_id and colors.color_name = 'Black'
        join models on models.model_id = models_products.model_id and model_name = 'iPhone SE';
        Спасибо огромное Вам за помощь!

        Когда я писал, выбрать все "iPhone SE", и например чёрного цвета, имелось ввиду в запросе использовать эти условия не словами, а с помощью ID's этих условий.
        Например "iPhone SE" имеет "model_id = 1" в таблице "models", а чёрный цвет имеет "color_id = 2" в таблице "colors".

        Видимо вот так:
        ExpandedWrap disabled
          SELECT products.product_id, products.product_description FROM products
           
          JOIN colors_products ON colors_products.product_id = products.product_id AND colors_products.color_id = 2
          JOIN models_products ON models_products.product_id = products.product_id AND models_products.model_id = 1
        Сообщение отредактировано: iPhonesoft -
          Цитата iPhonesoft @
          Видимо вот так:

          Да, все верно.
            Спасибо Вам огромное за помощь!
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0267 ]   [ 15 queries used ]   [ Generated: 12.09.24, 21:23 GMT ]