【问题标题】:How to compare records in a SQL Table如何比较 SQL 表中的记录
【发布时间】:2014-03-14 18:35:56
【问题描述】:

我有一个表名 TransactionTable。如果 InsuranceCode = 'ADAP' 和 IsADAP = 1,我必须过滤这些记录并返回剩余的记录。

我正在尝试编写类似于此语法的内容。

select *  from TransactionTable
where  Not Exists
(select * from TransactionTable where InsuranceCode = 'ADAP' and IsADAP = 1 )

TransactionTable 中的总记录为 1832,过滤条件的总记录为 109。我希望输出 1723 条记录。以下语法仅返回 785 条记录。我知道下面的语法不正确。

select * from TransactionTable 
where InsuranceCode <> 'ADAP' and IsADAP <> 1

如何比较一个表的记录并得到输出。

【问题讨论】:

  • 你没有清楚地解释你想要什么。如所写,RBarry 提供的答案是正确的。如果这不是你想要的,那么请更新你的问题,清楚地解释你真正想要的是什么

标签: sql sql-server tsql


【解决方案1】:

这可能就是你想要的:

select * from TransactionTable 
where (InsuranceCode <> 'ADAP' or IsADAP <> 1)

如果您想了解原因,请查找 DeMorgan's laws

注意上面和这个版本的意思一样:(忽略NULL)

select * from TransactionTable 
where NOT (InsuranceCode = 'ADAP' and IsADAP = 1)

.. 这是因为德摩根定律。

【讨论】:

  • 不,先生,过滤条件是 InsuranceCode = ADAP 和 IsADAP = 1。如果两个列值都在上面提到,只需过滤它。 OR 语法将返回记录,即使它们都不匹配
  • 是否要返回 InsuranceCode = ADAP 和 IsADAP = 1 的记录
  • @goofyui 照我说的做,并在此处查找德摩根定律:en.wikipedia.org/wiki/De_Morgan's_laws
  • @RBarryYoung 您可能应该在第一个 OR 条件中添加括号,以避免将来有人在没有注意到 OR 的情况下向 where 添加条件时出现错误
猜你喜欢
  • 2016-12-08
  • 2012-11-22
  • 2012-03-30
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多