Выберите отдельный столбец для внутреннего соединения - PullRequest
0 голосов
/ 22 мая 2018

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

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

Что-то вродеthis:

таблица ternary_relationship

id_Offer    -   id_Profile  -   id_Skill
1           -   1           -   1
1           -   1           -   2
1           -   1           -   3
1           -   2           -   1
2           -   1           -   1
2           -   1           -   2
2           -   1           -   3
2           -   2           -   1

таблица предложений

Offer   -   business_name
1       -   business-1
1       -   business-1
1       -   business-1
1       -   business-1
2       -   business-2 
2       -   business-2 
2       -   business-2 
2       -   business-2 

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

Я делал что-то вроде следующего запроса:

SELECT business_name, COUNT(*)
FROM Offer INNER JOIN
     ternary_relationship
     ON Offer.id_Offer = ternary_relationship.id_Offer AND
        id_Profile =  '1'
 GROUP BY business_name
 ORDER BY COUNT(*) DESC;

Я видел несколько возможных решений, но яне в состоянии заставить кого-либо работать на мое дело.Ни когда я группирую по обоим именам id_Offer, ни когда я фильтрую только по id_Offer, это тоже работает.Я всегда получаю где-то дублированные записи.

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете сделать JOINS и для однократного подсчета использовать DISTINCT

select o.business_name, count(distinct tr.id_Offer) counts
from Offer o inner join 
     ternary_relationship tr on 
     o.Offer = tr.id_Offer 
where tr.id_Profile = ?
group by o.business_name
order by 2 desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...