简体   繁体   中英

Whats wrong with this MYSQL Query

    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)));

This is working fine in Toad/MYsql but fails when I do it with prepared statement in java + mysql driver as

    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<=?)));

...

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

pstmt.executeQuery();

It is not closely related to problem but the query is not efficient and can be improved

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 

you need indexes on

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM