Вам нужно дважды присоединиться к таблице сеансов, чтобы получить статью, разделяющую один и тот же сеанс.
Затем объедините один раз со статьей для предложения фильтра, а другой раз, чтобы получить название другой статьи в другом сеансе.
SELECT aSameSession.art, count(*)
FROM art a
INNER JOIN Sess s
ON a.id = s.artid
INNER JOIN Sess sSameArticle
ON sSameArticle.sessid = s.sessid
INNER JOIN art aSameSession
ON sSameArticle.artid = aSameSession.id
WHERE A.art = 'A'
AND aSameSession.art <> 'A'
GROUP BY aSameSession.art
Выход:
B 2
C 1
D 3
E 1
F 1
G 1
Эта версия может быть немного трудна для понимания, поэтому здесь версия только с идентификатором статьи, которая намного проще:
SELECT sSameArticle.artid, count(*)
FROM Sess s
INNER JOIN Sess sSameArticle
ON sSameArticle.sessid = s.sessid
WHERE s.artid = 1
AND sSameArticle.artid != 1
GROUP BY sSameArticle.artid
Выход:
2 2
3 1
4 3
5 1
6 1
7 1
Добавление названия статьи просто косметическое.