选择具有相同值的列

时间:2019-10-04 08:20:11

标签: mysql sql

我对请求有点迷茫,这是我的表模式

id PK tickets_id 输入

让我说这些行

id     tickets_id      type
75        55            1
76        55            2 
77        56            1
78        56            2
79        56            3 
80        58            1
81        59            1
82        59            2

我需要在另一行中列出所有没有类型'2'但只有1或3的tickets_id

所以这里只列出tickets_id 58

不要求完整的解决方案,只是一点点的跟踪,我不知道如何开始:/

谢谢。

4 个答案:

答案 0 :(得分:1)

不存在

pg_user

答案 1 :(得分:1)

您可以简单地使用MySQL NOT IN函数:

SELECT DISTINCT tickets_id
FROM t
WHERE tickets_id NOT IN (
  SELECT tickets_id
  FROM t
  WHERE type = 2
)

答案 2 :(得分:0)

让我们假设您桌子的名字是票证

SELECT * 
FROM tickets 
WHERE tickets_id NOT IN (
SELECT tickets_id FROM tickets 
WHERE type=2
)

答案 3 :(得分:0)

如果只需要ticket_id,请使用聚合:

select tickets_id
from t
group by tickets_id
having sum( type = 2 ) = 0;  -- no type 2s

大概其余的值是1s和3s。如果要显式添加此条件,请使用:

select tickets_id
from t
where type in (1, 2, 3)
group by tickets_id
having sum( type = 2 ) = 0;  -- no type 2s

如果您想要所有票证ID,甚至不需要这些表中的票证ID,那么我假设您有另一张表,每tickets_id有一行。在这种情况下,我建议使用not exists

select ts.*
from tickets ts
where not exists (select 1
                  from t
                  where t.tickets_id = ts.tickets_id and t.type = 2
                 );