我们来看一下
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;
那里。第二种解决方案是
- 更快(最佳索引使用)
- 更容易编写(更少的代码)
- 更容易阅读(作者到底是怎么想连接数字的???)
更正确(正如Alnitak在问题评论中所说)。查看此示例数据:
book_id | genre_id
1 | 12
11 | 2
现在添加(或连接)v_book_id = 1
并v_genre_id = 12
查看您将如何通过concat()
查询获得有趣的结果
请注意,某些数据库(包括 MySQL)允许对tuples进行操作,这可能是上述聪明作者真正打算做的事情:
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)
请注意,某些数据库需要在右侧 tuple 周围加上额外的括号:((1, 2))