※ 引述《SonEat (善液)》之铭言:
: 再追加一个差集的问题
: 我把原表再多一栏
: table:MoleculeElement
: MoleculeID Element Number
: 1 Bi 1
: 1 Na 3
: 2 Bi 1
: 2 Na 1
: 2 O 1
: 3 Bi 3
: 3 C 1
: create table MoleculeElement
: (
: MoleculeID int,
: Element varchar(2),
: Number int
: );
: insert into MoleculeElement values
: (1,'Bi',1),(1,'Na',3),
: (2,'Bi',1),(2,'Na',1),(2,'O',1),
: (3,'Bi',1),(3,'C',3);
:
: 我想查询同时有Na与Bi的结果,也就是原问题1,再排除Na的Number=3的结果
: 也就是查询结果只得到 2
select MoleculeID
from (
select MoleculeID, Element from MoleculeElement where Element = 'Bi'
) as A
join (
select MoleculeID, Element from MoleculeElement where Element = 'Na'
) as B
using (MoleculeID)
where MoleculeID not in (
select MoleculeID from MoleculeElement
where Element = 'Na' and Number = 3
)