簡體   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