MySQL查询等于列名

时间:2018-07-25 17:46:39

标签: mysql

我有一个类似于以下内容的查询:

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为(Parent_Id)包含唯一的整数

在我的场景中-AnotherTable.UniqueID既包含表1中的唯一整数-也可能包含其他与此整数开头的无关垃圾。

我遇到的问题是,此查询的现状是,当parent_id为1400时,子选择仍将返回SumRadomField的总和,包括UniqueID'1400A2D45A'

如何在此字段上进行精确匹配?搜索后-我还没有找到任何可行的方法,包括双引号UniqueID,添加各种转义字符,双等等。

1 个答案:

答案 0 :(得分:2)

尝试使用CONCATLIKE而不是等于运算符(=)。

替换

... `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...