栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

FIND_IN_SET()与IN()

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

FIND_IN_SET()与IN()

SELECt  nameFROM    orders,companyWHERe   orderID = 1        AND companyID IN (attachedCompanyIDs)

attachedCompanyIDs
是转换为
INT
(的类型
companyID
)的标量值。

强制转换仅返回直到第一个非数字的数字(在您的情况下为逗号)。

从而,

companyID IN ('1,2,3') ≡ companyID IN (CAST('1,2,3' AS INT)) ≡ companyID IN (1)

在中

PostgreSQL
,您可以将字符串转换为数组(或首先将其存储为数组):

SELECt  nameFROM    ordersJOIN    companyON      companyID = ANY (('{' | attachedCompanyIDs | '}')::INT[])WHERe   orderID = 1

甚至会在上使用索引

companyID

不幸的是,这不起作用,

MySQL
因为后者不支持数组。

您可能会发现这篇文章很有趣(请参阅参考资料

#2
):

  • MySQL中的10件事(无法按预期工作)

更新:

如果以逗号分隔的列表中的值数量有一定的合理限制(例如,不超过

5
),那么您可以尝试使用此查询:

SELECt  nameFROM    ordersCROSS JOIN        (        SELECT  1 AS pos        UNIOn ALL        SELECT  2 AS pos        UNIOn ALL        SELECT  3 AS pos        UNIOn ALL        SELECT  4 AS pos        UNIOn ALL        SELECT  5 AS pos        ) qJOIN    companyON      companyID = CAST(NULLIF(SUBSTRING_INDEX(attachedCompanyIDs, ',', -pos), SUBSTRING_INDEX(attachedCompanyIDs, ',', 1 - pos)) AS UNSIGNED)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372230.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号