Select 行在某一列中只有一个值

Select rows having only one value in certain column

我在 table 中有一个项目列表,我只想 select 其中一些: 这是我的 table:

CREATE TABLE conexiones(
    idCon int not null,
    idType int not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

这里是连接项:

INSERT INTO conexiones (idCon,idType) VALUES
(1,1),
(2,1),
(3,1),
(4,1),
(5,1),
(6,1),
(2,2),
(3,2),
(4,2);

我得到的是这组结果:

idCon idType
1 1
2 1
3 1
4 1
5 1
6 1
2 2
3 2
4 2

我需要:

显示所有不共享相同 idCon,但具有不同 idType 的项目。

预期结果示例 1:

仅显示 idType 为 1 的项目,但删除 idType 为 1 且与 idType 2 共享 idCon 的项目,因此预期结果为:

idCon idType
1 1
5 1
6 1

预期结果示例 2:

仅显示 idType 为 2 的项目,但删除所有 idType 为 2 且与 idType 1 共享 idCon 的项目,因此预期结果为:

idCon idType
无结果

我该如何实现?

你的例子1是不是错了? 不应该是这样吗:

idCon idType
1 1
5 1
6 1

示例 1:

SELECT idCon, idType
FROM conexiones
WHERE idCon NOT IN (SELECT idCon FROM conexiones WHERE idType=2)
AND idType=1;

示例 2:

SELECT idCon, idType
FROM conexiones
WHERE idCon NOT IN (SELECT idCon FROM conexiones WHERE idType=1)
AND idType=2;

以下是您的操作方法。

select * from conexiones
 where idType = 1 -- Show only items with idType 1
    and idCon not in ( -- eliminating the item that has idType of 1 and does share an idCon with idType 2
        select idCon from conexiones where idType=2
    );
    
select * from conexiones
 where idType = 2
    and idCon not in (select idCon from conexiones where idType=1);

工作演示 -> https://www.db-fiddle.com/f/sYajoTcAbEPVdVxSNYfSJ2/0

以下可能的解决方案:

select distinct idCon, min(idType) idType
from conexiones group by idCon
having count(distinct idType) = 1

SQL fiddle

使用上面的单一查询,我们可以select所有项目都有单一的 idType(1 和 2)