2015-01-05 10 views
0

У меня ограниченный опыт работы с SQL, и я пытаюсь создать запрос, который «автоматически» использует запись xyzDesc вместо ссылок xyzID в результате запроса.SQL Server Cross Reference Query

Я включил образец того, что я ищу. Важно иметь в виду, что набор записей, который я пытаюсь создать, имеет ~ 35 столбцов (где необходимо, чтобы изначально внешнее объединение 3 очень больших таблиц), где ~ 10 столбцов должны быть xref, как я надеюсь, будет продемонстрировано пример. Кроме того, в базе данных, которую я запрашиваю, содержатся таблицы подчёркивания, содержащие миллионов строк.

Project стол:

projectID projectDesc capitalSpend regionID statusID 
-------------------------------------------------------------  
1   Project A 200    1   7 
2   Project B 300    1   2 
3   Project C 200    1   5 
4   Project D 100    2   4 
5   Project E 300    2   3 
6   Project F 500    3   1 
7   Project G 400    3   1 

StatusXref стол

statusID statusDesc 
------------------------  
1   Proposed 
2   Prelim 
3   Scheduled 
4   Execute 
5   Completed 
6   On Hold 
7   Decline 

RegionXref стол:

regionID regionDesc 
------------------------ 
1   New York 
2   Houston 
3   Los Angeles 
4   Chicago 
5   Denver 
6   Dallas 
7   Boston 

Ожидаемые результаты при выполнении запроса:

projectID projectDesc capitalSpend Region   Status 
--------------------------------------------------------------- 
    1  Project A  200   New York  Decline 
    2  Project B  300   New York  Prelim 
    3  Project C  200   New York  Completed 
    4  Project D  100   Houston  Execute 
    5  Project E  300   Houston  Scheduled 
    6  Project F  500   Los Angeles Proposed 
    7  Project G  400   Los Angeles Proposed 

Похоже, что это должно быть «легко», поскольку это было бы просто vlookup в excel, но я не хочу извлекать все данные в excel, а затем выполнять эти запросы, поскольку ограничения строки excel предотвращают полные данные.

+0

Будьте уверены, что вы делаете правильную работу, перемещаясь из Excel в базу данных. Теперь ... какая версия SQL? (т. е. SQL Server, Oracle, MySQL). Что вы пробовали до сих пор? –

ответ

0

попробовать что-то вроде этого:

select p.projectID, p.projectDesc, p.capitalSpend, r.regionDesc, s.statusDesc 
from Project p 
inner join StatusXref s on p.statusID = s.statusID 
inner join RegionXref r on p.regionID = r.regionID 
0

JOIN именно то, что вы ищете. Существует несколько типов joins, но наиболее распространенным является внутреннее соединение.

Пример запроса:

SELECT p.projectID, P.projectDesc, P.capitalSpend, R.regionDesc, S.statusDesc 
FROM Project P 
JOIN StatusXref S ON P.statusID = S.statusID 
JOIN RegionXref R ON P.regionID = R.regionID; 

Это SQLFiddle позволит вам выполнять запросы малого набора данных. Обязательно используйте правильную версию SQL в левом верхнем углу.

http://sqlfiddle.com/#!3/0ebc89


P.S. При запросе на большом наборе данных вы можете найти предложение LIMIT, чтобы быть полезным для тестирования и посмотреть, работает ли ваш запрос правильно, не пробегая миллионы строк.