如何为不在第 2 列中的第 1 列选择 SQL

Posted

技术标签:

【中文标题】如何为不在第 2 列中的第 1 列选择 SQL【英文标题】:How to select SQL for column 1 not in column 2 【发布时间】:2018-11-27 15:20:51 【问题描述】:

我有一个有四列的表。第一列 ID1 在 ID2 中有一个相似的行。我喜欢选择一个查询来从 ID2 中获取所有行,除了相同的记录。例如:

ID1 Name1 ID2 Name2
-------------------
01  A     01  A
01  A     02  B
01  A     03  C
03  C     03  C
03  C     01  A
03  C     04  G

从 ID2 ID1 的表中选择 ID2,Name2

输出应该是:

ID2, Name2
----------
02   B
03   C
01   A
04   G

03/C 和 01 A 需要在这里。 如果我使用 distinct,那么它会排除 ID1 的所有相同记录,我不想这样做。我正在使用经典 ASP 在 SELECt 选项列表中选择 ID1 组。如果我选择 01,则会出现 ID2 的 SELECT 选项列表。我只想查看所有不在 ID1 中的 ID2。

有人可以帮帮我吗? 谢谢。

【问题讨论】:

为什么03/C和01/A在结果集中? 因为03/C和01/A是另外一组ID1。如果我使用 distinct,那么它会排除 ID1 的所有相同记录,我不想这样做。我正在使用经典 ASP 在 SELECt 选项列表中选择 ID1 组。如果我选择 01,则会出现 ID2 的 SELECT 选项列表。我只想查看所有不在 ID1 中的 ID2。谢谢。 @JennyTran 如果您对以下答案求解器提出问题,请给它一个绿色勾号,并可能给它一个赞成票。 【参考方案1】:

我觉得不用解释了:

select id2, name2
from t
where (id1 <> id2) OR (name1 <> name2)

【讨论】:

据我了解给定问题,您的回答对于当前表格内容和指定输出来说已经足够好了,但是如果name1 != name2id1 = id2 您的查询将打印此记录,并且它不应该。应该有AND 而不是OR @ArielGrabijas 除了相同的记录不是相同的id。【参考方案2】:

我想你想要not exists。但是您的结果集似乎与问题的描述不符。

select id2, name2
from t
where not exists (select 1
                  from t t2
                  where t2.id1 = t.id2 and t2.name1 = t.name2
                 );

【讨论】:

它根本没有返回任何记录。【参考方案3】:

尝试“不同”

Select distinct ID2, Name2 From table where ID2 <> ID1

【讨论】:

【参考方案4】:

您的问题并不完全清楚,假设 ID1 不能等于 ID2 AND name1 可以等于 name2 正确答案是:

SELECT DISTINCT ID2, Name2 FROM tableName WHERE ID2 <> ID1

您选择列ID2Name2,但只选择ID1 不等于ID2 的列。还有DISTINCT,保证只返回不同的值。

如果 name1 不能等于 name2 你必须使用:

SELECT DISTINCT ID2, Name2 FROM tableName WHERE ID2 <> ID1 AND name1 <> name2

【讨论】:

我在我的帖子中添加了解释和图片。谢谢。【参考方案5】:

这将起作用:

select ID2,Name2 from tablename where ID1!=ID2 and Name1!=Name2

【讨论】:

以上是关于如何为不在第 2 列中的第 1 列选择 SQL的主要内容,如果未能解决你的问题,请参考以下文章

如何为HSQL中的每个组选择列中具有最大值的行?

C# SQL:如何为 SQL 表列中的每个不同值启动代码?

如何为列中的单元格着色?熊猫,pygsheets

如何引用列中的第一个非空字符串 - Cloudera Impala / Apache Hive / Spark SQL

WPF Grid - 如何为一列应用样式?

在配置单元中选择数组列中的第一个元素