이전에이 질문을 받았지만 이해하는데 어려움이 있습니다. 나는 거의 원시 SQL을 사용하지 않는다.
나는 세 개의 테이블 - Session
, GroupName
및 GroupSessionFeedback
을 가지고 있습니다.내부 조인트가있는 데카르트 제품 피하기
나는 idUser
에 GroupFeedback
에 Session
에 합류 그리고 난 idGroup
열 Session
에 GroupName
에 합류하고있다. 나는 그것이 idSessions
다시 독특한 가지고 싶어
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;
하지만 조인 나는 정말로 아이디어가의 어떤 다른 접근을 할 수 있기 때문에 그것을 여러 번 일치한다 :
여기 내 SQL 코드입니다. 나는 데이터베이스에 별도의 호출을 할 수있다. 그러나 나는 데이터베이스를 망치는 것을 피하려고 애 쓰고있다.
아이디어가 있으십니까?
두 점 : 당신은'ands'와'ors' 혼합된다. 'And'는'or'보다 우선권을 가지므로'start' 필터는 iduser 22에만 적용됩니다. 다른 사용자는 단순히 결과에 추가됩니다. [MySQL 또는/및 우선 순위?] (http://stackoverflow.com/questions/12345569/mysql-or-and-precedence)를 참조하십시오. 'in '을 사용하거나 모든 ors를 괄호로 묶으십시오. 두 번째 포인트 : 성능이 향상되지 않으면 색인을 다시 방문해야 할 것입니다. –