2

我试图只选择所有三个组(1、2、3)中的对象。
使用“WHERE gid IN (1,2,3)”选择我得到一个 OR 选择。我需要的是一个 AND 选择。

OBJECT_TABLE AS o  
id | field1 | field2 | ...  

 VALUES  
 1, a, b  
 2, c, d  
 3, e, f  
 ...


GROUP_XREF_TABLE AS gx   
 oid | gid  

VALUES  
1, 1  
1, 2  
1, 3  
2, 2  
3, 1  
3, 2  
...


SELECT DISTINCT o.id, gx.gid FROM `OBJECT_TABLE`  AS o
LEFT JOIN `GROUP_XREF_TABLE` AS gx ON o.id = gx.oid
WHERE gx.gid IN (1,2,3)

这将输出所有行。我需要一个 WHERE 子句,它只输出对象 id 为 1 的行,因为只有该对象在所有三个组中。

它是较大选择的一部分,因此仅应在 where 语句中完成这一点很重要(如果需要,子选择应该没问题)。

4

2 回答 2

3

下面的子选择将找到那些在 gx 中有 3 行的 oid:s:

SELECT o.id, gx.gid FROM `OBJECT_TABLE`  AS o
LEFT JOIN `GROUP_XREF_TABLE` AS gx ON o.id = gx.oid
WHERE gx.oid IN (
    SELECT oid FROM GROUP_XREF_TABLE as gx2 
     GROUP BY oid
    HAVING count(*) = 3)
于 2013-04-24T11:55:38.910 回答
0

尝试这个

   SELECT  o.id, gx.gid FROM `OBJECT_TABLE`  AS o
   LEFT JOIN `GROUP_XREF_TABLE` AS gx ON o.id = gx.oid
   WHERE gx.gid IN (1,2,3)
   group by gx.gid

在这里演示

于 2013-04-24T11:57:42.230 回答