我需要做相反的内部连接。
例如,我有“TypeComponent”表。我添加了MaxAllowed列
IDTypeElement Type MaxAllowed
Type1 battery 1
Type2 temperature 1
Type3 pressure 3
我有一个桌上发射器,里面只有一个电池,一个温度和三个压力元件
ID IDTransmitter IDTypeElement
1 A Type1
2 A Type2
3 A Type3
4 A Type3
5 A Type3
6 B Type1
7 B Type3
当我们向发送器添加一个组件时,我需要能够删除我们已经拥有的TypeElement。例如,发射器“B”,我想在我的列表框中,只能得到允许的组件。这里,我的意思是,列表框必须只包含“Type2”(温度)和“Type3”(压力),因为,我们只允许有一个“Type1”(电池),我们已经有了一个。另一方面,我们可以有3个“类型3”(压力),我们只有一个。
所以,我试着处理这个问题
SELECT IDTypeElement from typeelement
WHERE IDTypeElement not in (SELECT IDTypeElement FROM transmitter WHERE IDTransmitter="B")
我的问题是,我想能够抓取“Type3”,因为我们允许有3次“Type3”,但是有了这个查询,我只得到“Type2”。。。有没有办法知道元素的极限?有人能帮帮我吗?
希望你能理解我的问题(和我的英语)。
如果我以idtranmister:B为例,使用与上面类似的查询,我希望在列表框中有:“Type2”和“Type3”
最佳答案
下面的方法应该有效:
Select e.IDTypeElement
from TypeComponent e LEFT JOIN
(
select IDTransmitter, IDTypeElement, count(*) as used
from Transmitter
group by IDTransmitter,IDTypeElement
) t
on e.IDTypeElement = t.IDTypeElement
and t.IDTransmitter = 'B'
where (e.MaxAllowed-ifnull(t.used,0))>0
请检查sqlfiddle@http://sqlfiddle.com/#!9/c8743/5