みてみましょう
WHERE concat(book_id,genre_id) = concat(v_book_id,v_genre_id);
とは対照的に
WHERE book_id = v_book_id AND genre_id = v_genre_id;
三。2番目の解決策は
- より高速(最適なインデックスの使用)
- 書きやすい(コードが少ない)
- 読みやすい(著者は数字を連結しようと考えていたのは一体何だったのか???)
より正確です(Alnitakも質問のコメントで述べているように)。このサンプルデータを確認してください。
book_id | genre_id
1 | 12
11 | 2
次に、追加(または連結)v_book_id = 1
して、クエリv_genre_id = 12
で面白い結果が得られる方法を確認しますconcat()
一部のデータベース(MySQLを含む)ではタプルの操作が許可されています。これは、上記の巧妙な作成者が実際に意図したことである可能性があります。
WHERE (book_id, genre_id) = (v_book_id, v_genre_id);
このようなタプル述語の実例:
SELECT * FROM (
SELECT 1 x, 2 y FROM DUAL UNION ALL
SELECT 1 x, 3 y FROM DUAL UNION ALL
SELECT 1 x, 2 y FROM DUAL
) a
WHERE (x, y) = (1, 2)
一部のデータベースでは、右側のタプルの前後に追加の括弧が必要になることに注意してください。((1, 2))