【问题标题】:Mysql where clause column IN query not giving correct results [closed]Mysql where子句列IN查询没有给出正确的结果[关闭]
【发布时间】:2018-04-10 07:08:08
【问题描述】:

表格:

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

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

结果:

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

【问题讨论】:

  • 你的预期输出是什么?
  • 根据查询看起来是正确的,您到底需要什么?
  • 喜欢没有通配符是没用的。替换为 =
  • 应该是一条只有columnValue 50的记录,没有columnValue 150匹配的记录。
  • 结果对给定的查询有效。你得到你所要求的。

标签: mysql where-clause where-in


【解决方案1】:

这是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

【讨论】:

  • SELECT * FROM support_profile, Count(distinct columnValue) as valueChanges 应该是 SELECT *,Count(distinct columnValue) as valueChanges FROM support_profile
  • 谢谢大家。 SELECT Count(distinct columnValue) as valueChanges FROM support_profile WHERE packageName LIKE 'Platinum' AND columnValue IN ('50','150');通过这个查询,我得到了解决方案。
【解决方案2】:

如果您想获取 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' ;

【讨论】:

  • 我只需要 WHERE columnValue IN ('50','150') 中不匹配的记录;
  • 对不起,我很困惑,这意味着您要记录与50和150匹配的记录?
  • 是的。我需要一个查询来检查特定 packageName 和 columnValue 的数据是否更改?
  • 好的,请检查编辑后的答案。希望我能正确理解你的问题:)
  • 没有。我的意思是说我有一个输入(50,150)。在表中我有 cloumnValue 为(50,50)。所以我想比较这些输入数据。数据是否相同。
猜你喜欢
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2020-10-13
  • 2019-07-07
相关资源
最近更新 更多