2012-01-09 64 views
0

我有一个数据以这种方式存在的表。通过单个SQL查询一次搜索多个行

A B C 
--------- 
0 6 2 
0 3 4 
1 0 2 
1 1 4 

我写了一个SQL查询 -

select A 
from Table 
where (B = 6 and C = 2) AND (B = 3 and C = 4). 

显然它返回零分的结果,因为这个查询将在同一行中搜索。请帮助我编写一个更好的结果,以便可以用一条语句检查两行。编辑: 我不是在寻找'OR'语句。我需要找到A的一个元素,使它有两个对应的行,并且每个行都有对应地存在于B,C列中的元素6,2和3,4。

PS。

(我没有写两个查询,然后找出两个集合的共同元素的选项。)

很多感谢

+0

欢迎使用StackOverflow:如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)以很好的格式和语法突出显示它! – 2012-01-09 09:45:28

+0

感谢您的提及。 – killboi6174 2012-01-09 10:04:32

回答

2

我想你想是这样的

select A 
from YourTable 
where (B = 6 and C = 2) or 
     (B = 3 and C = 4) 
group by A 
having count(distinct B) >= 2 

试试这里:
http://data.stackexchange.com/stackoverflow/q/123711/

+0

当我对(B = 0和C = 2)或(B = 1和C = 4)进行相同的查询时,它给了我1. – killboi6174 2012-01-09 11:19:42

+0

@ killboi6174是的?这是A = 1的数据。至少从编辑问题开始。 – 2012-01-09 11:27:32

+0

对不起,以前没有说清楚。我的意思是当我给出类似于(B = 0和C = 2)或(B = 2和C = 4)的东西时,它仍然给我1,就好像它检查条件是否适用于至少一行。但期望的结果应该是零。 – killboi6174 2012-01-09 11:43:42

2

使用OR代替

select A from Table where (B=6 and C=2) OR (B=3 and C=4). 

如果你想onlu结果使用DISTINCT

select DISTINCT A from Table where (B=6 and C=2) OR (B=3 and C=4). 

如果您需要检查的平等,使用此:

select t1.A 
from Table t1 
JOIN Table t2 ON t1.A = t2.A 
where T1.B=6 and t1.C=2 AND t2.B=3 and t2.C=4 

正如你看到的 - 使用再次

+0

这两行都必须存在,并且都需要包含上述数据。我不是在寻找'OR'替代 – killboi6174 2012-01-09 10:09:17

+0

或者如果你寻找所有的行,使用变种#1 – 2012-01-09 11:07:37

1

你试图让这个?

SELECT A 
FROM Table 
WHERE (B = 6 AND C = 2) OR (B = 3 AND C = 4) 

这将返回所有四行的A列。

如果不是:什么究竟是你想选择?

如果你想只是两行,一行与A = 0,一个与A = 1,然后使用DISTINCT

SELECT DISTINCT A 
FROM Table 
WHERE (B = 6 AND C = 2) OR (B = 3 AND C = 4) 
+0

不是一种替代方案。不幸的是,我不是。 – killboi6174 2012-01-09 10:12:51

1

可能:

select A 
from Table 
where (B = 6 and C = 2) 
INTERSECT 
select A 
from Table 
(B = 3 and C = 4) 
+0

这与执行两个查询相同,原始数据库相当重,与我提供的示例相反。 – killboi6174 2012-01-09 10:42:37

+0

如果你不喜欢'intersect',你可以使用Oleg Dok提出的inner join,或者你也可以进行子选择。 – taro 2012-01-09 10:48:01