在SQL中选择不同的列对
考虑在SQL中选择不同的列对,sql,Sql,考虑 create table pairs ( number a, number b ) 数据在哪里 1,4 4,1 2,4 2,4 3,2 3,2 2,3 5,1 Etc. 我明白了 1,4 4,1 2,4 3,2 2,3 5,1 什么查询为我提供了数字列b的不同值,以便我可以看到 1,4 5,1 2,4 3,2 只有 我不希望a列中的值出现在b列中。请帮忙 我需要的是在列的两侧选择不同的值。例如,如果1,2存在,那么2,1就不能存在您没有说明您的数据库管理系统,但这在许多数据库管理系统上都
create table pairs ( number a, number b )
数据在哪里
1,4
4,1
2,4
2,4
3,2
3,2
2,3
5,1
Etc.
我明白了
1,4
4,1
2,4
3,2
2,3
5,1
什么查询为我提供了数字列b的不同值,以便我可以看到
1,4
5,1
2,4
3,2
只有
我不希望a列中的值出现在b列中。请帮忙
我需要的是在列的两侧选择不同的值。例如,如果1,2存在,那么2,1就不能存在您没有说明您的数据库管理系统,但这在许多数据库管理系统上都起作用。不幸的是,最小和最大的数据库管理系统都不是SQL标准的一部分
select distinct least(a,b), greatest(a,b)
from pairs
您可以按摩数据并将较小的值放在第一位:
SELECT CASE WHEN a < b THEN a ELSE b END a,
CASE WHEN a < b THEN b ELSE a END b
FROM pairs
然后,您可以选择与此不同的:
SELECT DISTINCT a, b
FROM
(
SELECT CASE WHEN a < b THEN a ELSE b END a,
CASE WHEN a < b THEN b ELSE a END b
FROM pairs
) x
或者,如果a和b之间的含义没有差异,则可以强制执行一个约束,强制a始终小于或等于b,从而控制输入过程中的数据。然后您只需执行一个简单的SELECT DISTINCT操作。您可以尝试此查询以获取列a中的所有DISTINCT值
SELECT distinct(a) FROM pairs WHERE not exists(select b from pairs where a=b)
听起来你需要自己的DISTINCT扩展版本 您可以在SQL Server中执行此操作。。。通过光标 从表中加载光标。循环遍历游标,模式匹配,并通过在每次游标迭代中将INSERT填充到工作表或临时表中来保留所需内容 从最后的表格中选择将显示您的结果。删除工作表,否则临时表将在会话结束时删除 还可以将此逻辑放入存储过程中
注意,游标是内存密集型的,特别是在未正确使用时。但对于非平凡或复杂的逻辑非常方便。您是否在寻找从对中选择不同的A、B?这将只返回一列,他/她需要两列
SELECT distinct(a) FROM pairs WHERE not exists(select b from pairs where a=b)