我有一个类似于以下内容的查询:
SELECT
`Table1`.`UniqueID` as `parent_id`,
`Table1`.`OtherField`,
(SELECT SUM(`SomeRandomField`) FROM `AnotherTable` WHERE `SomeRandomField` NOT LIKE '%Something%' AND `UniqueID` = `parent_id`) AS `DataIWant`
#Other selects, a couple of joins etc here
在我的场景中 - Table1.UniqueID
as (Parent_Id) 包含唯一整数
在我的场景中 - AnotherTable.UniqueID
包含表 1 中的唯一整数 - 但也可能包含以此整数开头的其他不相关的垃圾。
我遇到的问题是,这个查询的现状是,当parent_id
为1400时,子选择仍将返回SumRadomField的总和,包括UniqueID'1400A2D45A'
如何在该字段上进行精确匹配?经过搜索 - 我还没有找到任何有效的方法,包括双引号 UniqueID、添加各种转义字符、双等于等。
最佳答案
尝试使用 CONCAT
和 LIKE
而不是等于运算符 (=
)。
替换
... `UniqueID` = `parent_id` ...
与
... `UniqueID` LIKE CONCAT(`parent_id`, '%') ...
完整的查询是
SELECT
`Table1`.`UniqueID` AS `parent_id`,
`Table1`.`OtherField`,
(SELECT
SUM(`SomeRandomField`)
FROM
`AnotherTable`
WHERE
`SomeRandomField` NOT LIKE '%Something%'
AND `UniqueID` LIKE CONCAT(`parent_id`, '%')) AS `DataIWant`
-- and your joins...
关于MySQL 查询等于列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51524905/