1

我有这样的记录......

oid        id

35         1

43         1

46         1

43         2

49         2

50         3

51         3

52         4

我有 id=1 和 2 。我想要那些只属于两个 ids(1,2) 的结果。

即 - o/p = object_id = 43 的记录,因为它同时属于 1 和 2。

如果我使用in运算符,那么它会给出所有记录(执行 OR 操作)

4

3 回答 3

1

这是此类问题的通用快速解决方案。

  1. 获取满足我们条件的所有 ID(在本例中为 oid 值):

    select oid from MyTalbe
    where id in (1,2)
    group by oid
    having count (distinct id) >1
    

  2. 在我们需要的 ID 列表中选择 ID('oid` 列)所在的行:

    select oid, id from Mytable where oid in (select oid from MyTalbe where id in (1,2) -- 这与: where id =1 or id=2 group by oid with count (distinct id) >1 相同)

于 2013-06-18T11:09:12.927 回答
0

尝试这个

SELECT t.oid FROM table1 t
WHERE t.oid IN (SELECT oid FROM table1 t1 WHERE t1.oid=t.oid AND t1.id = 1)
AND t.oid IN (SELECT oid FROM table1 t1 WHERE t1.oid=t.oid AND  t1.id = 2)
GROUP BY oid
于 2013-06-18T11:20:17.613 回答
0

您可以使用IN运算符,然后使用带有 HAVING 子句的 GROUP BY 来仅返回 DISTINCT 计数为 2 的那些行:

select oid
from yourtable
where id in (1,2)
group by oid
having count(distinct id) = 2;  
                          --^ change this number to the count of ids in IN clause

请参阅带有演示的 SQL Fiddle

于 2013-06-18T11:39:00.730 回答