1

一个简单的测验:

想必很多小伙伴都知道,

在我的应用程序中有一个查询,其中我在这样的条件下使用 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);

现在,我知道这有一个问题/错误,在你的一生中只会发生两次。你能告诉我它是什么吗?

我昨天发现了这一点,并认为我应该对所有其他人在练习这一点发出声音。

谢谢。

4

1 回答 1

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
    

    现在添加(或连接)v_book_id = 1v_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))

于 2012-05-09T09:15:14.677 回答