繁体   English   中英

理解MySQL where子句中的&运算符

[英]Understanding & operator in MySQL where clause

我正在尝试解决 MySQL 中的一个编程问题。我有下表。

在此处输入图像描述

我想获得以“阅读”和“绘画”为兴趣的人的名字。

解决方案给出的可能结果之一如下。

SELECT name
    FROM people_interests
    WHERE interests & 1 AND interests & 8
    ORDER BY name

但是,我不明白为什么这个查询在这里有效。 有人可以解释为什么这有效以及&运算符在这里做什么吗?

我遇到了同样的问题,但您在问题中遗漏了一些重要信息:

interests - 这个人的兴趣或爱好的集合,以逗号连接的字符串形式给出。 此列具有数据类型

set('reading','sports','swimming','drawing','writing','acting','cooking','dancing','fishkeeping','juggling','sculpting','videogaming').

这个集合特别重要,因为它告诉您 position 您正在寻找的值,在本例中分别为“阅读”和“绘图”position 1 和 4。

现在,这是棘手的部分:

要将其转换为二进制,您正在使用他们的 position 来设置二进制值,例如:

阅读,position 1 设置二进制数 00000001 中的第一位(请记住 LSB 或最低有效位是从右到左的)。

绘图,position 4 设置二进制数的第四位,即 00001000

希望此时您意识到,如果将这些二进制值转换为十进制,它们将变成 1 和 8,这就是它起作用的原因。

这很奇怪。 我怀疑是想给大家介绍MySQL中的set数据类型。 文档在这里

这很奇怪的原因是列中的分号。 集合通常使用逗号作为分隔符——这是记录在案的分隔符,我认为没有任何方法可以更改它们。

也就是说,通常不建议使用套装,原因如下:

  • 它们特定于 MySQL。
  • 它们受限于可以存储在集合中的值的数量。
  • 它们可能会造成混淆,因为它们混淆了字符串、整数和位位置。

在某些特定情况下,它们可能很有用,但大多数数据库在没有它们的情况下也能做得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM