我有3个表,用于存储来自仓库的包的信息。
表1(主):
id | pkgno | barcode | weight
表2(子):
id | mainid | boxno | rackno | batchno | inqty
表3(装运):
id | subid | shipdate | blno | outqty
我如何查询仅在inqty
减去outqty
不等于0(因此1或更多)的条件下显示的数据行?
这是我开始的查询:
SELECT
s.id as subid, s.rackno, s.boxno, s.batchno, s.inqty,
m.pkgno, m.barcode, m.weight
FROM
Bundle:Main m
LEFT JOIN
m.sub s
WHERE
m.pkgno = :pkgno
这将给我所有有包装号的,而不管数量。我如何设置它,以便当像$currentqty = $inqty - $outqty,如果($currentqty> 0)然后显示数据?我知道如何在简单的php中做到这一点,但不太确定Symfony2。
编辑:更多的解释:所以不是所有的子表实体都有一个Shipment条目,也就是说,如果那个包还没有发货,那么它是空的。我希望有这样的条件,即当前数量将把空数据(null)作为0。因此,如果Sub没有Shipment条目,则inqty
将减去0。
摘自doctrine文档
$query = $em->createQuery('SELECT u FROM CmsUser u WHERE ((u.id + 5000) * u.id + 3) < 10000000');
因此,您可以通过将每个算术操作包装在括号中来使用列进行算术运算。因此,只需连接三个表并减去您的两个值。
WHERE
table2.outqty IS NOT NULL AND
(table2.inqty - table3.outqty) > 0
我通过将空值设置为0,通过coalesce()
函数找到了解决方案。
SELECT
s.id as subid, s.rackno, s.boxno, s.batchno, s.inqty,
m.pkgno, m.barcode, m.weight,
ss.outqty
FROM
Bundle:Main m
LEFT JOIN
m.sub s
LEFT JOIN
s.ship ss
WHERE
m.pkgno = :pkgno
AND
(s.inqty - coalesce(ss.outqty, 0)) > 0