我有一个表存储有关供应商的信息。其中大约有 10 个布尔列,指示供应商所属的部门。供应商可以属于多个部门。
如何查询表以查找具有多个布尔列标记为 true 的供应商?
我的tbl_vendor_departments专栏:
vendor_id(varchar) vendor_name(varchar) clothing(bool) automotive(bool) lawn_garden(bool) tools(bool)...等等。
在 MySQL 中,布尔值只是整数 0 或 1。因此您可以使用算术:
SELECT ...
FROM tbl_vendor_departments
WHERE (clothing + automotive + lawn_garden + tools) >= 2
Run Code Online (Sandbox Code Playgroud)
严格来说,在 MySQL 中,零是 false,任何非零值都是 true。因此,如果您的“布尔”列包含大于 1 的真实值(例如 42),您可能会得到意外的结果。为了补偿,您可以将 true 值反转为 false,然后再次反转。这应该将 42 转换为 0,然后再转换回 1。使用括号来控制运算符优先级。
SELECT ...
FROM tbl_vendor_departments
WHERE (
(NOT NOT clothing) +
(NOT NOT automotive) +
(NOT NOT lawn_garden) +
(NOT NOT tools)
) >= 2
Run Code Online (Sandbox Code Playgroud)
不过,不要尝试将此方法与其他 SQL 实现一起使用。大多数不以boolean与整数算术兼容的方式实现,因此上述查询将(并且应该,根据 ANSI SQL)生成错误。对于这些,您可以使用 CASE 表达式将 true 转换为 1:
SELECT ...
FROM tbl_vendor_departments
WHERE (
CASE clothing WHEN true THEN 1 ELSE 0 END +
CASE automotive WHEN true THEN 1 ELSE 0 END +
CASE lawn_garden WHEN true THEN 1 ELSE 0 END +
CASE tools WHEN true THEN 1 ELSE 0 END
) >= 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |