如何为不在第 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 != name2
和id1 = 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
您选择列ID2
和Name2
,但只选择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的主要内容,如果未能解决你的问题,请参考以下文章