为了账号安全,请及时绑定邮箱和手机立即绑定

查找_IN_set()vs IN()

查找_IN_set()vs IN()

MMMHUHU 2019-06-29 18:05:45
查找_IN_set()vs IN()我的数据库里有两张桌子。一个是订单,一个是公司。订单的结构如下:OrderID     |     attachedCompanyIDs------------------------------------    1                     1,2,3    2                     2,4公司有这样的结构:CompanyID      |        name--------------------------------------     1                 Company 1     2                 Another Company    3                 StackOverflow    4                 Nothing要获得订单的公司名称,我可以这样进行查询:SELECT name FROM orders,companyWHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)该查询工作正常,但下面的查询不工作。SELECT name FROM orders,companyWHERE orderID = 1 AND companyID IN (attachedCompanyIDs)为什么第一个查询工作,而不是第二个查询?第一个查询返回:name---------------Company 1Another Company StackOverflow第二个查询只返回:name---------------Company 1为什么第一个查询返回所有公司,而第二个查询只返回第一个查询?
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

附件CompanyID是一个大字符串,因此MySQL试图在其中找到它的转换为整数的公司。

当你使用WHERE

所以如果comapnyid=1:

companyID IN ('1,2,3')

这是返回真

但如果数字1不是第一位

 companyID IN ('2,3,1')

其返回为假


查看完整回答
反对 回复 2019-06-29
?
忽然笑

TA贡献1806条经验 获得超5个赞

获取所有相关公司的名称,而不是基于特定的ID。

SELECT 
    (SELECT GROUP_CONCAT(cmp.cmpny_name) 
    FROM company cmp 
    WHERE FIND_IN_SET(cmp.CompanyID, odr.attachedCompanyIDs)
    ) AS COMPANIESFROM orders odr


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 388 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信