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
使用上面的单一查询,我们可以select所有项目都有单一的 idType(1 和 2)
我在 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
使用上面的单一查询,我们可以select所有项目都有单一的 idType(1 和 2)