经过一个实例简述数据库查询里FIND_IN_SET() 和IN()区别html
问题: mysql
数据库中有两个表: Orders 和 Companiessql
Orders的表结构: 数据库
OrderID | attachedCompanyIDs ------------------------------------ 1 1,2,3 2 2,4
Campany表结构:数组
CompanyID | name -------------------------------------- 1 Company 1 2 Another Company 3 StackOverflow 4 Nothing
楼主给出两种查询方式:spa
第一种:code
SELECT name FROM orders,company WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)工做正常. 查询结果以下:
name --------------- Company 1 Another Company StackOverflow
第二种:htm
SELECT name FROM orders,company WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)出现问题, 查询结果以下:
name --------------- Company 1 Another Company StackOverflow
做何解释?字符串
答案:get
使用关键字IN时, 会自动对值的类型进行转换, 而后在进行操做. 在上面的状况中SELECT name FROM orders,company WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)
companyID IN ('1,2,3') ≡ companyID IN (CAST('1,2,3' AS INT)) ≡ companyID IN (1)
SELECT name FROM orders JOIN company ON companyID = ANY (('{' | attachedCompanyIDs | '}')::INT[]) WHERE orderID = 1可是MySQL暂不支持. 你能够在这个连接里面找到一些有趣的文章:
原文地址: http://stackoverflow.com/questions/4155873/find-in-set-vs-in