2015-08-28 3 views
0

Я использую postgresql для хранения и анализа данных для исследовательского проекта. У меня есть набор таблиц, которые выглядят примерно так:Как выбрать элементы из таблицы, на которые ссылается другая таблица?

fileType (name varchar(80), id serial primary key); 
fileTable (...various details, fileType integer references fileType(id), id serial primary key); 
parameterTable (... various params, id serial primary key); 
resultsTable (fileKey integer references fileTable(id), parameterKey integer references parameterTable(id), ...results); 

То, что я хочу сделать, это написать запрос, который выглядит примерно следующим образом:

SELECT COUNT(... details) FROM resultsTable WHERE parameterKey = ? AND fileKey... 

И я ищу, чтобы выяснить, способ получить результаты из всех точек, где fileKey ссылается на fileTable с конкретной ссылкой fileType.

Так, например, если у меня есть 2 типа файлов (fileTypeA и fileTypeB) и набор файлов типа A или B, я хочу получить детали из результатов для всех типов файлов, ссылающихся на fileTypeA. Как я могу написать запрос, который делает это?

ответ

1

Используйте ключевое слово join для подключения таблиц с использованием первичных и внешних ключей.

На основании вашего описания следует, вероятно, будет:

select * 
from resultsTable r 
join parameterTable p on r.parameterKey = p.id 
join fileTable f on r.fileKey = f.id 
join fileType ft on ft.id = f.fileType 
where ft.type = 'fileTypeA' 

Это вы должны получить все детали из результатов для всех типов файлов, которые ссылаются на fileTypeA.

Смежные вопросы