Выборка данных из связанной таблицы?
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    информация о разделе
  ![]()  | Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. | 
    Выборка данных из связанной таблицы?
    
  | 
         
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Добрый день! 
        
      Подскажите пожалуйста, как можно на основе связующих таблиц "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"     | 
    
| 
         
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
        ![]() ![]() 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' Вот такой запрос даст тот же результат, но отработает чутка быстрее: ![]() ![]() 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';  | 
    
| 
         
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Спасибо огромное Вам за помощь! 
        
      Когда я писал, выбрать все "iPhone SE", и например чёрного цвета, имелось ввиду в запросе использовать эти условия не словами, а с помощью ID's этих условий. Например "iPhone SE" имеет "model_id = 1" в таблице "models", а чёрный цвет имеет "color_id = 2" в таблице "colors". Видимо вот так: ![]() ![]() 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  | 
    
| 
         
         
         
          
           Сообщ.
           #4
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата iPhonesoft @  Видимо вот так: Да, все верно.  | 
    
| 
         
         
         
          
           Сообщ.
           #5
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Спасибо Вам огромное за помощь!   
        
       |