1

我已经构建了一个像这样的连接表。

表名: myTable

p_id | c_id
-----------
1     1
1     2
1     3
2     2    
2     3
3     2
3     3
3     4

我想选择不具有 c_id 3 和 4 的 p_id。在这种情况下,只有 p_id 3 同时具有 c_id 3 和 4,因此在 select 语句之后,查询应该返回 p_id 1 和 2。问题是我尝试不同一种方法,但它仍然行不通。我真的需要帮助。

我的查询

1.)SELECT DISTINCT p_id FROM myTable WHERE c_id != 3 AND course_id != 4;

问题:它仍然返回 3 作为结果之一,因为 3 的 c_id 为 2

4

5 回答 5

2

像这样的东西:

SELECT DISTINCT p_id 
FROM   mytable 
WHERE  p_id NOT IN (SELECT p_id 
                    FROM   mytable 
                    WHERE  c_id IN ( 3, 4 ) 
                    GROUP  BY p_id 
                    HAVING Count(DISTINCT c_id) = 2)

SQLFiddle demo

于 2013-12-31T07:33:55.933 回答
0

尝试这个:

SELECT DISTINCT p_id 
FROM myTable 
WHERE c_id IN (3,4) 
GROUP BY p_id HAVING COUNT(DISTINCT c_id)<2
于 2013-12-31T07:35:34.397 回答
0

直接的解决方案是使用存在

  select 
distinct p_Id
    from myTable t
   where not (exists (select 1
                        from myTable
                       where (c_id = 3) and
                             (p_id = t.p_id)) and 
              exists (select 1
                        from myTable
                       where (c_id = 4) and
                             (p_id = t.p_id)))
于 2013-12-31T07:36:01.600 回答
0

尝试这个:

SELECT mytable.p_id 
FROM   mytable 
       LEFT OUTER JOIN (SELECT v1.p_id 
                        FROM   (SELECT p_id 
                                FROM   mytable 
                                WHERE  c_id = 3) v1 
                                INNER JOIN (SELECT p_id 
                                            FROM   mytable 
                                           WHERE  c_id = 4) v2 
                                       ON v1.p_id = v2.p_id) v 
                    ON mytable.p_id = v.p_id 
WHERE  v.p_id IS NULL 
GROUP  BY mytable.p_id 
于 2013-12-31T08:04:37.433 回答
0

尝试这个:

select distinct mytable.p_id from mytable where c_id not in (3,4) and p_id <>3

这将给出没有 3 和 4 的结果

于 2013-12-31T09:46:14.730 回答