Проблема SQL-запроса - PullRequest
       0

Проблема SQL-запроса

2 голосов
/ 27 апреля 2011

Рассмотрим две таблицы. Таблица техников имеет такие поля, как T_ID, T_Name. Таблица проекта имеет такие поля, как P_ID, P_Name, P_Date.

Теперь, поскольку техник может работать над многими проектами, а проект может быть выполнен многими техниками. Следовательно, как очевидно, между этими двумя таблицами существует отношение многих ко многим. Разбейте многие на многие и создайте новую таблицу с именем Assignment, которая состоит из внешних ключей T_ID и P_ID.

Вот вопрос: я хочу узнать список тех, с кем работал конкретный техник (техник с T_ID = 1 за последний месяц (апрель / 2011). Например, если техник 1 работал с техниками 2 и 3, то они соответствуют вышеуказанному результату запроса, и я хотел бы, чтобы tech 2 и Tech 3 T_ID T_name.

Ответ также может быть основан на двух связанных запросах. Пожалуйста, дайте мне знать, что будет запрос для упомянутой проблемы.

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Это найдет всех людей, которые работали на заданиях с техником, у которого ID = 10. Может быть:

SELECT t.T_ID, t.T_Name
FROM Technician t, Project p, Assignments a
WHERE t.T_ID = a.T_ID and p.P_ID = a.P_ID
and a.P_ID IN (SELECT assign.P_ID FROM Assignments assign, Projects proj WHERE assign.T_ID = 10 and assign.P_ID = proj.P_ID and (proj.P_Date - getdate() <= 30))

Дата немного догадывается, так как я не уверен в синтаксисе, однако остальные должны получить необходимую информацию.

0 голосов
/ 27 апреля 2011

Присвойте таблице назначений собственный первичный ключ (потому что составные ключи отстой).Два ?символы представляют собой идентификатор техника, с которым вы спрашиваете, с кем работал.Например: "Кто работал с Техником 5"?будет 5 х.

SELECT 
    a1.T_ID
FROM 
    Assignment a1
WHERE 
    a1.A_ID IN ( 
        SELECT assignment.A_ID
        FROM Assignment a2
        WHERE a2.T_ID = ?
    ) 
    AND a1.T_ID != ?
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...