2009-08-27 52 views
1

我有两个值的数组,如X,Y,Z和1,2 有一个有两列的表A.我想验证表A中所有组合存在的记录不管的重复。 例如检查表中的记录组合

X 1 

Y 1 

Z 1 

X 2 

Y 2 

Z 2 

在此先感谢!

回答

1

这将适用于任何数据集,并且不会假定您知道表中的值。

查询返回缺少的所有行。你可以很容易地把它变成一个插入语句来填充你的表。

SELECT * 
FROM 
(select * from (SELECT DISTINCT col1 FROM table1) CROSS JOIN (SELECT DISTINCT col2 FROM table1)) AS t1 
LEFT OUTER JOIN table1 ON t1.col1 = table1.col1 AND t1.col2 = table1.col2 
WHERE 
table1.col1 is null 
+0

我刚才看到你用“oracle”标记了你的问题。此查询是为SQL Server设计的。无论如何,原则是一样的。 – 2009-08-27 03:32:38

+0

感谢您的回复。我尝试查询并按照所述的方式工作。实际上这些数组值来自外部,因此我需要将它们传递给查询rathor,而不是根据表本身比较组合。而且,这些组合是动态的,将来会增长。 – Lico 2009-08-27 12:58:37

+0

还有一件事我想提一下,表中可能没有一些行可以比较。例如值为X的行可能不在那里,我仍然想要比较这一行。所以它可能会丢失X与行集合的比较 – Lico 2009-08-27 13:03:55

1

下应该工作无论值:

select col1, col2 
from (select distinct col1 from combtest), (select distinct col2 from combtest) 
minus 
select col1, col2 
from combtest 

首先,它获取可能的组合,然后减去实际的组合。

+0

非常好。希望T-SQL有一个减号运算符。 – Hafthor 2009-08-27 04:25:55