IN 조건에서 여러 값을 사용할 때는 MySQL 문 오류
1
2
3
SELECT cartItems.id, book_id, title, summary, price, quantity FROM cartItems
LEFT JOIN books ON cartItems.book_id = books.id
WHERE user_id = ? AND cartItems.id IN (?)
1
2
-- parameter
[ 2, [ 2, 4 ] ]
원인
나의 경우에는 쿼리에서 (2, 4)
로 해석되어야하는데 ([2, 4])
로 해석되어 문제가 발생
프로그래밍 언어나 라이브러리에 따라 파라미터를 바인딩하는 방식이 다를 수 있음!
해결
정석의 방식을 사용하여 (?) 에 대응하는 파라미터를 배열로 작성하지 않고, (?,?,?)와 같이 작성하여 개별적으로 처리되도록 설정
1
2
3
4
if (selected) {
sql += `AND cartItems.id IN (?${",?".repeat(selected.length - 1)})`;
values.push(...selected);
}
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const getCartsItems = async (req, res) => {
const { user_id, selected } = req.body;
let sql = `SELECT cartItems.id, book_id, title, summary, price, quantity FROM cartItems
LEFT JOIN books ON cartItems.book_id = books.id
WHERE user_id = ? `;
const values = [user_id];
if (selected) {
sql += `AND cartItems.id IN (?${",?".repeat(selected.length - 1)})`;
values.push(...selected);
}
try {
const { rows, conn } = await getSqlQueryResult(sql, values);
res.status(StatusCodes.OK).send({ lists: rows });
conn.release();
} catch (err) {
handleServerError(res, err);
}
};
This post is licensed under CC BY 4.0 by the author.