2011-03-18 4 views
1
SELECT * FROM event JOIN user ON event.event_user_id=user.user_id 
    WHERE ((event.event_date BETWEEN '2011-03-01' AND '2011-04-01') 
    AND user.user_id in (SELECT user_id FROM user_map 
     WHERE (user_map.user_id_map=1 AND user_map.user_relation<=7))); 

두꺼비/MySQL은이 노력하고 벌금하지만 ... 내가무슨 잘못이 MYSQL 쿼리

SELECT * FROM event JOIN user ON event.event_user_id=user.user_id 
    WHERE ((event.event_date BETWEEN ? AND ?) 
    AND user.user_id in (SELECT user_id FROM user_map 
     WHERE (user_map.user_id_map=? AND user_map.user_relation<=?))); 

로 자바 + MySQL의 드라이버 준비된 문을 수행 할 때 실패

pstmt.setDate(1, <sqlDate>); 
pstmt.setDate(2, <sqlDate>); 
pstmt.setLong(3, <int>); 
pstmt.setLong(4, <int>); 

pstmt.executeQuery(); 
+4

에 인덱스를 필요 "실패"는 꽤 모호합니다 ... 실제로 무슨 일이 일어나는지 알려주시겠습니까? 그것은 실행하지만 잘못된 결과를 반환합니까? 오류 메시지를 제공 하시겠습니까? 후자 인 경우 오류 메시지는 무엇입니까? –

+1

은 스택 추적을 표시합니다. – Nishant

+0

마지막 코드 스 니펫을 그대로 게시 할 때도 유용합니다. 우리가 substitude 실제 매개 변수 등등 때 확인할 수없는 preparedstatement 메서드에 매개 변수를 전달하면 만들 수있는 몇 가지 오류가 있습니다 ... – Chris

답변

1

문제와 밀접한 관련이 없지만 쿼리가 효율적이지 않고 향상 될 수 있습니다.

SELECT * 
FROM event 
     JOIN USER 
     ON event.event_user_id = USER.user_id 
     JOIN user_map 
     ON user_map.user_id = USER.user_id 
      AND user_map.user_id_map = 1 
      AND user_map.user_relation<=7 
WHERE (event.event_date BETWEEN '2011-03-01' AND '2011-04-01') 
GROUP BY USER.user_id 

당신은

  • (event.event_user_id, event.event_date)
  • (USER.user_id)
  • (user_map.user_id, user_map.user_id_map, user_map.user_relation)
+0

감사합니다! 내가 여기에 게시하기 전에 내가 가진 공간 문제였습니다. 그러나 나는 기뻤다. 당신은 querry가 많은 effecient이고 읽기 쉽다고 생각합니다. 매일 학습 !! 다시 한 번 감사드립니다. –