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

时间:2018-05-23 13:51:32

标签: mysql mysqli

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

SELECT *, @allaccts := TRIM( BOTH  ',' FROM owneridslinked4billing) as 
 targetids, ( select sum(price) from orderstable where 
   paymentstatus='unpaid' and ownid in (@allaccts) ) as amountdue FROM users

问题是目标的输出是:

110909,110910,110911,110912

(确切地说是什么)

但查询输出的结果不对。它不包括查询中的所有ID(110909,110910,110911,110912)和“@idlaccts中的ownid”。我想它将所有逗号分隔值作为一个而不是单独的值,因此输出错误的结果。

我希望这是有道理的。

我想要的是让mysql使用查询中owneridslinked4billing字段中的数据,并输出ownid位于owneridslinked4billing中的结果(这是一个以逗号分隔的ID列表)。

1 个答案:

答案 0 :(得分:1)

使用FIND_IN_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;

如果您打算在所有帐户ownid的CSV列表中找到110909,110910,110911,110912值,则可以使用此功能。

继续前进,您应该避免FIND_IN_SET和CSV数据,并规范化您的数据。将每个id移动到一个单独的行并进行连接。