다음 쿼리를 실행하려고 합니다:
SELECT user_id, 0 post_id, current_timestamp granted_at
FROM badge_posts
WHERE (:backfill OR user_id IN (:user_ids) OR 0 NOT IN (:post_ids) )
GROUP BY user_id
HAVING count(*) > 1000
하지만 :backfill에서 오류가 발생합니다. 이유가 무엇일까요?
이 SQL은 이전에 배지 생성 시 정상적으로 실행되었던 것으로 알고 있습니다.
:로 시작하는 모든 것은 DBMS에 전송되기 전에 mini_sql에 의해 대체될 예정인 이름 지정된 매개변수입니다. 이는 자체적으로 유효한 SQL이 아닙니다.
예를 들어, 아래 [2]번을 참고하세요:
[1] pry(main)> User.find_by(username: 'anon43915857').id
=> 5
[2] pry(main)> DB.query(
"SELECT id FROM users WHERE username = :username",
{ username: 'anon43915857' }
).first.id
=> 5
[3] pry(main)> DB.query(
"SELECT id FROM users WHERE username = ?",
'anon43915857'
).first.id
=> 5