Mysql where子句列IN查询没有给出正确的结果

时间:2018-04-10 07:08:08

标签: mysql where-clause where-in

表格

enter image description here

从上表中,下面的查询没有给出正确的结果。

SELECT * FROM `support_profile` 
WHERE `packageName` LIKE 'Platinum' AND `columnValue` IN ('50','150');

结果:

enter image description here

对于特定的packageName和columnValue,我需要一个查询来检查数据是否已更改?

2 个答案:

答案 0 :(得分:0)

如果您想获取IN(50,150)并且不想比较包名称的记录,请删除相似的条件。使用如下查询。我希望这可以帮助您获得准确的输出,并请发布您的预期输出:

SELECT * FROM `support_profile` WHERE `columnValue` IN ('50','150');

如果您想检查与50和150不匹配的数据,那么您可以尝试以下查询:

SELECT * FROM `support_profile` WHERE `packageName` LIKE 'Platinum' AND  `columnValue` NOT IN ('50','150');

要检查表中是否存在数据,请在WHERE中使用AND,如下所示:

SELECT * FROM `support_profile` WHERE `packageName` LIKE 'Platinum' AND  `columnValue` = '50' AND `columnValue` = '150' ;

答案 1 :(得分:0)

这是IN

的内部表示
Where `columnValue` In (50)     => Where (columnValue = 50)
Where `columnValue` In (50,100) => Where ( (columnValue = 50) OR (columnValue =100) )

您的查询:

SELECT * FROM `support_profile` 
WHERE `packageName` LIKE 'Platinum' AND `columnValue` IN ('50','150');

相当于

SELECT * FROM `support_profile` 
WHERE 
(
    (`packageName` LIKE 'Platinum')
    AND
    (
        (`columnValue` = '50')
        OR (`columnValue` = '100')
    )
);

将使用columnValue 50或100返回所有Platinum。

如果您只想返回铂金50或铂金100,您可以将它们分组。 (通过对记录进行排序,确保您想要的最新记录)

SELECT * FROM `support_profile` 
WHERE `packageName` LIKE 'Platinum' AND `columnValue` IN ('50','150')
GROUP BY `packageName`, `columnValue` ;

如果您想知道包裹值是否已更改

SELECT * FROM `support_profile`, Count(distinct `columnValue`) as valueChanges
WHERE `packageName` LIKE 'Platinum' AND `columnValue` IN ('50','150')
GROUP BY `packageName` ;

你得到了

silver 2
gold 1
platinum 1

PS:请帮我们一个忙,并搜索如何提问here