Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос.  [new]
AndrewMG
Member

Откуда:
Сообщений: 18
Суть вопроса:

таблица 1:
Client_Contract
поля:
1. client_id
2. expense_id

таблица 2:
Expense
поля:
1. expense_id
2. ...

Необходимо реализовать следующий запрос:
1. Из таблицы Client_Contract выбрать все expense_id, где client_id=(любое число)
2. Из таблицы Expense выбрать все строки соответствующие значениям запроса выполненного выше (получить просто список expense_id с доступом ко всем полям)

Подскажите пожалуйста как можно реализовать данный запрос.

Т.е. по смыслу должно быть что-то из этой серии:
SELECT * FROM Expense WHERE(SELECT expense_id FROM Client_Contract WHERE client_id=1);

Спасибо!
9 дек 14, 03:15    [16969672]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7599
AndrewMG,

JOIN
9 дек 14, 03:17    [16969675]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
AndrewMG
Member

Откуда:
Сообщений: 18
т.к. пишу приложение на C# - могу обойти данную проблему сделав просто 2 запроса SQL, но интересует как можно всё выполнить за один вызов.
9 дек 14, 03:17    [16969677]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
AndrewMG
Member

Откуда:
Сообщений: 18
Relic Hunter, никак не могу разобраться с запросом.
select Expense.expense_id, Expense.expense_cost
  from Expense
  inner join Client_Contract on Client_Contract.client_id = 1;

Подскажите пожалуйста в чём ошибка?
9 дек 14, 03:48    [16969684]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
AndrewMG
Member

Откуда:
Сообщений: 18
Relic Hunter, просто проблема в том, что мне нужно взять значения из таблицы Client_Contract (id) и заданному id сопоставить все совпадения (expense_id) и уже сделать inner join с таблицей Expense где совпадают (Expense.expense_id и Client_Contract.expense_id)
9 дек 14, 03:55    [16969686]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
JeStone
Member

Откуда:
Сообщений: 248
AndrewMG,
Почитай внимательно как работает INNER JOIN
Вот в этой фразе кроется ответ:
автор
где совпадают (Expense.expense_id и Client_Contract.expense_id)
9 дек 14, 04:38    [16969692]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
Jaffar
Member

Откуда:
Сообщений: 633
AndrewMG
т.к. пишу приложение на C# - могу обойти данную проблему сделав просто 2 запроса SQL, но интересует как можно всё выполнить за один вызов.



вместо тысячи слов.

К сообщению приложен файл. Размер - 14Kb
9 дек 14, 13:12    [16971653]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
AndrewMG
Member

Откуда:
Сообщений: 18
JeStone, это я реализовал сразу. Но проблема в том что перед тем как сделать INNER JOIN мне нужно выбрать сначала только те expense_id, которые соответствуют нужному мне client_id, т.к. я с SQL знаком 2 недели - для меня проблематично реализовать такой запрос, прошу более наводящую подсказку :)
9 дек 14, 15:12    [16972583]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
Glory
Member

Откуда:
Сообщений: 104751
select Expense.expense_id, Expense.expense_cost
  from Expense
  inner join Client_Contract on Client_Contract.expense_id = Expense.expense_id;
9 дек 14, 15:30    [16972700]     Ответить | Цитировать Сообщить модератору
 Re: Запрос.  [new]
AndrewMG
Member

Откуда:
Сообщений: 18
Glory, Спасибо за подсказку. Методом тыка доделал то, что пытался объяснить:
SELECT Expense.expense_id, Expense.expense_cost
  FROM Expense
  inner join Client_Contract ON Client_Contract.expense_id = Expense.expense_id WHERE Client_Contract.client_id=1;


Оказывается можно было просто дописать WHERE, спасибо.
9 дек 14, 16:02    [16972931]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить