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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)