我们正在为名为readoutprobes和readoutprobekits的项目创建一个库存系统。请参见下面的模式。
readoutprobekit是一个预定义的1个或多个readoutprobes的集合。在工具箱中,特定类型的readoutprobe只能出现一次。
readoutprobe的库存由readoutprobe\u容器表跟踪,该表监视容器卷。
readoutprobekit的库存由readoutprobekit\u容器表跟踪。但是,readoutprobe工具包不跟踪物理readoutprobe容器。相反,它假设一个物理readoutkit是使用一组预定义的readoutprobe正确地“组装”起来的。
对于特定的readoutprobe,直接从readoutprobe\u container表获取卷大于0的物理readoutprobe容器的计数,对于工具包也是如此
但是,我们希望为每个readoutprobe获得一个“reserved count”编号,反映确实存在并且确实包含特定readoutprobe的工具包。
例如,假设我们有一个readoutprobe,名为a,计数为42。现在,在创建包含名为a的readoutprobe的特定readoutprobe工具包时,我们希望readoutprobe a的“reserved”计数为1。
但是,如果有一种方法可以添加到readoutprobes及其库存的查询中,那就更好了。
readoutprobes的“主查询”如下所示:
SELECT readoutprobes.*,
v.total_volume,
stock_containers.stock_count,
aliquots.aliquots_count
FROM readoutprobes
LEFT JOIN (
SELECT p.id, COUNT(*) stock_count, stock_containers.readoutprobe_id
FROM readoutprobes AS p, readoutprobe_containers AS stock_containers
WHERE p.id = stock_containers.readoutprobe_id AND stock_containers.volume > 0 AND stock_containers.parent_container IS NULL
GROUP BY p.id
) AS stock_containers
ON stock_containers.readoutprobe_id = readoutprobes.id
LEFT JOIN (
SELECT p.id, COUNT(*) aliquots_count, aliquot_containers.readoutprobe_id
FROM readoutprobes AS p, readoutprobe_containers AS aliquot_containers
WHERE p.id = aliquot_containers.readoutprobe_id AND aliquot_containers.volume > 0 AND aliquot_containers.parent_container IS NOT NULL
GROUP BY p.id
) AS aliquots
ON aliquots.readoutprobe_id = readoutprobes.id
LEFT JOIN (
SELECT readoutprobes.id, COALESCE(SUM(pt.volume),0) total_volume
FROM readoutprobes, readoutprobe_containers AS pt
WHERE readoutprobes.id = pt.readoutprobe_id
GROUP BY readoutprobes.id
) AS v
ON readoutprobes.id = v.id
GROUP BY readoutprobes.id
ORDER BY readoutprobes.id;
暂无答案!
目前还没有任何答案,快来回答吧!