在查询中使用来自同一mysql表的数据

在查询中使用来自同一mysql表的数据,mysql,Mysql,我发现了一个奇怪的问题。以下是查询: SELECT *, @allaccts := TRIM( BOTH ',' FROM owneridslinked4billing) as targetids, ( select sum(price) from orderstable where paymentstatus='unpaid' and ownid in (@allaccts) ) as amountdue FROM users 问题在于targetID的输出是: 110909,

我发现了一个奇怪的问题。以下是查询:

SELECT *, @allaccts := TRIM( BOTH  ',' FROM owneridslinked4billing) as 
 targetids, ( select sum(price) from orderstable where 
   paymentstatus='unpaid' and ownid in (@allaccts) ) as amountdue FROM users
问题在于targetID的输出是:

110909,110910,110911,110912
(完全符合要求)

但是查询输出的结果是错误的。它没有将所有ID(110909110910110911110912)包含在查询“和(@allaccts)中的ownid”中。我猜它是把所有逗号分隔的值作为一个值,而不是单独的值,所以输出错误的结果

我希望这是有道理的


我只想让mysql使用查询中
ownerisdlinked4billing
字段中的数据,并在
ownerisdlinked4billing
中输出
ownerisdlinked4billing
中的
ownerisdlinked4billing
结果(这是一个逗号分隔的ID列表)。

使用
FIND\u in\u-in\u-SET
可以立即解决此问题:

SELECT *, @allaccts := TRIM( BOTH ',' FROM owneridslinked4billing) as targetids,
    ( select sum(price) from orderstable
      where paymentstatus='unpaid' and
      FIND_IN_SET(ownid, @allaccts) > 0 ) as amountdue
FROM users;
假设您的目的是在所有帐户的CSV列表中找到
ownid
110909110910110911110912
,那么这将起作用


向前看,通常应避免
在_集合中查找
和CSV数据,并对数据进行规范化。将每个id移动到单独的一行并进行连接。

这解决了问题,谢谢。但我还是想知道为什么IN不在这里工作?:)@中的HaiderAbbas
使用列列表,而不是CSV值列表。