我需要做相反的内部连接。
例如,我有“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

07-25 21:49