Я знаю, что об этом уже спрашивали, но мне трудно это понять. Я редко использую чистый SQL.
У меня есть три таблицы: Session
, GroupName
и GroupSessionFeedback
.
Я присоединяю Session
к GroupFeedback
в столбце idUser
и присоединяю GroupName
к Session
в столбце idGroup
.
Вот мой код SQL:
SELECT s.idSession,
g.name,
s.Assistant,
s.idGroup,
s.start,
s.end,
f.value
FROM rempad.Session s
INNER JOIN rempad.GroupSessionFeedback f
ON s.idUser = f.idUser
INNER JOIN rempad.GroupName g
ON s.idGroup = g.idGroup
WHERE s.start BETWEEN '2013-04-28' AND '2013-05-28'
AND s.idUser = 22
OR s.idUser = 23
OR s.idUser = 24
OR s.idUser = 26
OR s.idUser = 27
OR s.idUser = 28
OR s.idUser = 42;
Я хочу, чтобы он возвращал уникальный idSessions
, но он совпадал с ним несколько раз из-за соединений, и я действительно не знаю, какой другой подход использовать. Я мог бы делать отдельные вызовы в базу данных, но я действительно стараюсь не забивать базу данных, поскольку она и так довольно медленная.
Любые идеи?
заранее спасибо
ands
иors
.And
имеет приоритет надor
, в результате чего фильтрstart
учитывается только для iduser 22. Другие пользователи просто добавляются к результату. См. Mysql или/и приоритет?. Используйтеin
или заключите всеors
в круглые скобки. Второй момент: если производительность не улучшится, вам, вероятно, придется пересмотреть индексы. - person Nikola Markovinović   schedule 31.08.2013