Mysql where 子句列 IN 查询未给出正确结果

Mysql where clause column IN query not giving correct results

Table:

根据上面的 table,下面的查询没有给出正确的结果。

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

结果:

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

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

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');

要检查两个数据是否都存在于 table 中,请在 WHERE 中使用 AND,如下所示:

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

这里是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')
    )
);

return columnValue 为 50 或 100 的所有白金。

如果您只想return 白金 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