Составить SQL запрос

Тема в разделе "Базы данных", создана пользователем Monterpan, 7 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    Помогите, пожалуйста, доделать SQL запрос. Убил часа 4.

    Есть следующая структура БД и следующий рабочий запрос выбирающий данные из двух верхних таблиц:

    SELECT Заказы.Код_заказа,
    Изделия_заказа.Код_изделия,
    Изделия_заказа.Количество_изделия,
    Заказы.Дата_изготовления,
    Заказы.Код_заказчика
    FROM Заказы LEFT JOIN Изделия_заказа ON Изделия_заказа.Код_заказа = Заказы.Код_заказа
    ---------------------------------
    Нужно вместо Изделия_заказа.Код_изделия и Заказы.Код_заказчика выбрать соответственно Изделия.Изделие и Заказчики.Заказчик (т.е. выбрать дополнительно данные из нижних таблиц вместо кодов)

    т.е. нужно выбрать следующие данные
    SELECT Заказы.Код_заказа,
    Изделия.Изделие,
    Изделия_заказа.Количество_изделия,
    Заказы.Дата_изготовления,
    Заказчики.Заказчик

    Я понимаю, что подключить нижние таблицы можно с помощью INNER JOIN. Но все мои варианты оказались с ошибками. Помогите, пожалуйста.
     

    Вложения:

    • database.JPG
      database.JPG
      Размер файла:
      21,9 КБ
      Просмотров:
      29
  2. MadWizard

    MadWizard Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    145
    Симпатии:
    20
    Правильно понимаю, что Изделия и Заказчики - это третья и четвертая таблица в этом запросе?
    Тогда можно их также подключить LEFT JOIN.
     
  3. BlackPawn

    BlackPawn Постоялец

    Регистр.:
    19 мар 2009
    Сообщения:
    75
    Симпатии:
    27
    Код:
    SELECT 
    Заказы.Код_заказа, 
    Изделия.Изделие,
    Изделия_заказа.Количество_изделия,
    Заказы.Дата_изготовления, 
    Заказчики.Заказчик
    FROM Изделия_заказа 
    LEFT JOIN Изделия ON Изделия_заказа.Код_изделия=Изделия.Код_изделия
    LEFT JOIN Заказы ON Изделия_заказа.Код_заказа=Заказы.Код_заказа
    LEFT JOIN Заказчики ON Заказы.Код_заказчика=Заказчики.Код_заказчика 
    
     
  4. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    SELECT *FROM ((T1 INNER JOIN T2 ON T1.key = T2.key) INNER JOIN T3 ON T1.key = T3.key) INNER JOIN T4 ON T1.key2 = T4.key;

    T1 - Заказы
    T2 - Изделия заказа
    T3 - Изделия
    T4 - закзчики

    Вместо key постав свои поля с ключами.

    BlackPawn - на скрине видно, что чел пишет запрос в аксесе, там джоины поиному делаются.
     
    Monterpan нравится это.
  5. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    Выдает ошибку: " Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Изделия_заказа.Код_изделия=Изделия.Код_изделия
    LEFT JOIN Заказы ON Изделия_заказа.Код_заказа=Заказы.Код_заказа
    LEFT JOIN Заказчики ON Заказы.Код_заказчика=Заказчики.Код_заказчика'
    "
     
  6. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    Этот запрос не будет работать в аксесе, только MS и My SQL
     
  7. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    Работает, получился такой вариант:
    SELECT Заказы.Код_заказа,
    Изделия.Изделие,
    Изделия_заказа.Количество_изделия,
    Заказы.Дата_изготовления,
    Заказчики.Заказчик FROM
    ((Заказы INNER JOIN Изделия_заказа ON Заказы.Код_заказа = Изделия_заказа.Код_заказа)
    INNER JOIN Изделия ON Изделия_заказа.Код_изделия = Изделия.Код_изделия)
    INNER JOIN Заказчики ON Заказы.Код_заказчика = Заказчики.Код_заказчика

    Я пишу запрос к аксесу подключаясь из delphi.
     
  8. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    Запрос то обрабатывает аксес и формат ему нужен свой(и в делфи и си...)
    А в дальнейшем делай так:
    1. добавляешь в акссес необходимое количество таблиц с одним полем например ID
    2. создаешь запрос в нем с помощью конструктора
    3. добавляешь в его все таблицы
    4. и создаешь связи таблиц, перетягиванием одного поля таблицы на другое поле
    5. включаешь режим SQL и у тебя готовый запрос
     
    Monterpan нравится это.
  9. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    Кстати да, очень удобно.

    Знал бы это 2 дня назад, сэкономил бы часов 8 точно.
     
  10. gadiks

    gadiks Постоялец

    Регистр.:
    29 мар 2009
    Сообщения:
    117
    Симпатии:
    102
    подскажите как правильно составить запрос для новости в дле (будет много различных рецептов) нужно сделать чтобы вводило имя заголовок, дата новости, короткая новость и полная новость, ну может еще какие нужные поля таблиц для дле, или может если есть какой конвертер для быстрого составления такой штуки...
     
Статус темы:
Закрыта.