在我的数据库中,我想选择每个construction_manual
where storage_room.quantity > component.quantity
但是当我使用:
SELECT construction_manual.name
FROM construction_manual cm, construction_manual_component cmc, component, storage_room
WHERE cm.ID = cmc.construction_manual_ID
AND cmc.component_ID = component.ID
AND component.storage_room_ID = storage_room.ID
AND storage_room.quantity > component.quantity
它将选择每个 construction_manual.name,只要storage_room中的第一个组件具有足够的数量。所以让我们说...
construction_manual.1 needs
component.A -> quantity 5
component.B -> quantity 10
在储藏室里有:
component.A -> quantity 6
component.B -> quantity 0
虽然储藏室里没有足够的,但construction_manual.1
会被选中。如何仅选择storage_room中有足够的组件construction_manuals
?
编辑:
在我的 4 个表中是以下数据集。当我使用上面提到的查询时,我会得到以下结果:数据库。但是我应该无法建造一张桌子,因为没有足够的wooden_plates(木板而不是木板......UPS(
我想你想问的是忽略或排除任何没有足够的组件来满足构建的施工手册。 如果是这种情况,您可以执行以下操作(左联接也可以这样做(:
select distinct cm.name as construction_manual
from construction_manual cm
join construction_manual_component cmc
on cmc.construction_manual_ID = cm.ID
join component c
on c.ID = cmc.component_ID
join storage_room sr
on sr.ID = c.storage_room_ID
where sr.quantity > c.quantity
and cm.ID not in (select cm.ID
from construction_manual cm
join construction_manual_component cmc
on cmc.construction_manual_ID = cm.ID
join component c
on c.ID = cmc.component_ID
join storage_room sr
on sr.ID = c.storage_room_ID
where sr.quantity < c.quantity);