FIND_IN_SET() vs IN(), StackOverFlow上的一个问题
2013-07-12 15:29
423 查看
通过一个实例简述数据库查询里FIND_IN_SET() 和IN()区别
问题:
数据库中有两个表: Orders 和 Companies
Orders的表结构:
Campany表结构:
想要查询的数据为: ID为1的order对应的全部Company的名字.
楼主给出两种查询方式:
第一种:
第二种:
作何解释?
答案:
使用关键字IN时, 会自动对值的类型进行转换, 然后在进行操作. 在上面的情况中
attachedCompanyIDs 的值将被转化成INT (也就是CompanyID的类型), 所以这里字符串"1,2,3"在转换过程中会变成1(到第一个非数字位停止转换). 因此,
在PostgreSQL中, 你可以使用如下方法把字符串转化成数组:
10
things in MySQL (that won’t work as expected)
原文地址: http://stackoverflow.com/questions/4155873/find-in-set-vs-in
问题:
数据库中有两个表: Orders 和 Companies
Orders的表结构:
OrderID | attachedCompanyIDs ------------------------------------ 1 1,2,3 2 2,4
Campany表结构:
CompanyID | name -------------------------------------- 1 Company 1 2 Another Company 3 StackOverflow 4 Nothing
想要查询的数据为: ID为1的order对应的全部Company的名字.
楼主给出两种查询方式:
第一种:
SELECT name FROM orders,company WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)工作正常. 查询结果如下:
name --------------- Company 1 Another Company StackOverflow
第二种:
SELECT name FROM orders,company WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)出现问题, 查询结果如下:
name --------------- Company 1 Another Company StackOverflow
作何解释?
答案:
使用关键字IN时, 会自动对值的类型进行转换, 然后在进行操作. 在上面的情况中
SELECT name FROM orders,company WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)
attachedCompanyIDs 的值将被转化成INT (也就是CompanyID的类型), 所以这里字符串"1,2,3"在转换过程中会变成1(到第一个非数字位停止转换). 因此,
companyID IN ('1,2,3') ≡ companyID IN (CAST('1,2,3' AS INT)) ≡ companyID IN (1)
在PostgreSQL中, 你可以使用如下方法把字符串转化成数组:
SELECT name FROM orders JOIN company ON companyID = ANY (('{' | attachedCompanyIDs | '}')::INT[]) WHERE orderID = 1但是MySQL暂不支持. 你可以在这个链接里面找到一些有趣的文章:
10
things in MySQL (that won’t work as expected)
原文地址: http://stackoverflow.com/questions/4155873/find-in-set-vs-in
相关文章推荐
- FIND_IN_SET() vs IN(), StackOverFlow上的一个问题
- FIND_IN_SET() vs IN(), StackOverFlow上的一个问题
- Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题
- mysql中的 IN和FIND_IN_SET的查询问题
- leetcode 438. Find All Anagrams in a String 一个简单的移动窗口问题
- 关于 find_in_set 的性能问题
- mysql中的 IN和FIND_IN_SET的查询问题
- stackover flow 上的一个问题:Find the most common entry in an array
- mysql中的 IN和FIND_IN_SET的查询问题
- 一天一个mysql函数(二) FIND_IN_SET()
- MySQL查询中 find_in_set 在使用中可能遇到的问题
- mysql中的 IN和FIND_IN_SET的查询问题
- Android 开发过程中遇到了一个问题 小记录一下 ERROR: In <declare-styleable> BorderLinearLayout, unable to find attribu
- mysql中的 IN和FIND_IN_SET的查询问题
- Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题
- 问题解决:hive中的find_in_set不能用作join的条件
- mybatis中遇到的一个小问题【There is no result map named java.lang.Integer in this SqlMap】
- mysql中FIND_IN_SET的使用方法
- FIND_IN_SET()
- mysql中FIND_IN_SET的使用方法