gpt4 book ai didi

mysql - 在什么条件下使用 concat,好还是坏?

转载 作者:行者123 更新时间:2023-11-29 05:36:01 26 4
gpt4 key购买 nike

一个简单的测验:

可能很多人以前都知道,

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

现在,我知道这里面有一个陷阱/错误,它在您的一生中只会出现两次。你能告诉我这是什么吗?

我昨天发现了这一点,并认为我应该大声疾呼所有其他人都在这样做。

谢谢。

最佳答案

让我们看看

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)允许对元组 进行操作,这可能是上述聪明的作者的真正意图:

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))

关于mysql - 在什么条件下使用 concat,好还是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10513039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com