可能很多人以前都知道这个,
在我的应用程序中有一个查询,其中我使用concat在这样的条件,
v_book_id和v_genre_id是我程序中的2个变量。
SELECT link_id
FROM link
WHERE concat(book_id,genre_id) = concat(v_book_id,v_genre_id);
现在,我知道这里有一个问题/错误,在你的一生中只会发生两次。你能告诉我它是什么吗?
我昨天发现了这一点,并认为我应该对所有其他人都这样做吵闹。
感谢。
答案 0 :(得分:3)
让我们看看
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
现在添加(或concat)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))