猿问

查找_IN_set()vs IN()

查找_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

为什么第一个查询返回所有公司,而第二个查询只返回第一个查询?


MMMHUHU
浏览 389回答 3
3回答

墨色风雨

附件CompanyID是一个大字符串,因此MySQL试图在其中找到它的转换为整数的公司。当你使用WHERE所以如果comapnyid=1:companyID IN ('1,2,3')这是返回真但如果数字1不是第一位 companyID IN ('2,3,1')其返回为假

忽然笑

获取所有相关公司的名称,而不是基于特定的ID。SELECT      (SELECT GROUP_CONCAT(cmp.cmpny_name)      FROM company cmp      WHERE FIND_IN_SET(cmp.CompanyID, odr.attachedCompanyIDs)     ) AS COMPANIESFROM orders odr
随时随地看视频慕课网APP

相关分类

MySQL
我要回答