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

vs91vp4v  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(328)

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

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

(完全符合要求)
但是查询输出了错误的结果。在查询“and ownid in(@allaccts)”中不包括所有ID(110909110910110911110912)。我猜它是把所有逗号分隔的值作为一个值,而不是单独的值,所以输出错误的结果。
我希望这有道理。
我只想让mysql使用 owneridslinked4billing 字段并输出结果,其中 ownidowneridslinked4billing (这是以逗号分隔的ID列表)。

6ie5vjzr

6ie5vjzr1#

使用 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移到一个单独的行并进行连接。

相关问题