返回重复行但在两次引用同一表时列值翻转的SQL

返回重复行但在两次引用同一表时列值翻转的SQL,sql,oracle,Sql,Oracle,我试图使用公共ID将一个表与其自身连接起来,以查找某个列不相等的实例。我的问题是,我的脚本返回几乎重复的行,但返回的列中的值被交换(因此,distinct将不起作用) 例如: Select distinct t1.ID, t1.Value V1, t2.Value V2 from t1, t2 where t1.ID = t2.ID and t1.Value <> t2.Value 当我希望它只返回单行时: ID V1 V2 1 A B 您可以使用最小/最大函数:

我试图使用公共ID将一个表与其自身连接起来,以查找某个列不相等的实例。我的问题是,我的脚本返回几乎重复的行,但返回的列中的值被交换(因此,distinct将不起作用)

例如:

Select distinct t1.ID, t1.Value V1, t2.Value V2
from t1, t2
where t1.ID = t2.ID 
and t1.Value <> t2.Value
当我希望它只返回单行时:

ID  V1  V2
1   A   B

您可以使用
最小/最大
函数:

SELECT DISTINCT t1.ID,
     LEAST(t1.Value , t2.Value)   AS V1,
     GREATEST(t1.Value, t2.Value) AS V2
FROM t1
JOIN t2
  ON t1.ID = t2.ID 
WHERE t1.Value <> t2.Value;
选择不同的t1.ID,
最小值(t1.值,t2.值)为V1,
最大值(t1.值,t2.值)为V2
从t1开始
连接t2
在t1.ID=t2.ID上
式中t1.值t2.值;

您可以使用
最小/最大功能:

SELECT DISTINCT t1.ID,
     LEAST(t1.Value , t2.Value)   AS V1,
     GREATEST(t1.Value, t2.Value) AS V2
FROM t1
JOIN t2
  ON t1.ID = t2.ID 
WHERE t1.Value <> t2.Value;
选择不同的t1.ID,
最小值(t1.值,t2.值)为V1,
最大值(t1.值,t2.值)为V2
从t1开始
连接t2
在t1.ID=t2.ID上
式中t1.值t2.值;

我可以提出建议吗

Select t1.ID, t1.Value as V1, t2.Value as V2
from t1 join
     t2
     on t1.ID = t2.ID and
        t1.Value < t2.Value;
选择t1.ID,t1.值为V1,t2.值为V2
从t1连接
t2
在t1.ID=t2.ID和
t1.值
请注意,更改是
,我可以建议吗

Select t1.ID, t1.Value as V1, t2.Value as V2
from t1 join
     t2
     on t1.ID = t2.ID and
        t1.Value < t2.Value;
选择t1.ID,t1.值为V1,t2.值为V2
从t1连接
t2
在t1.ID=t2.ID和
t1.值

请注意,更改是
这工作非常完美,我不敢相信我没有想到这一点!这很好用,真不敢相信我没想到!