如果其中一个字段不存在mysql,则返回null

时间:2015-02-04 22:09:49

标签: mysql

$check = "SELECT    up.quantity AS stockAble,
                    oh.quantity AS stockAsk

          FROM      stock_update up
          JOIN      orders oh
          ON        up.quantity > oh.quantity
          AND       up.package = oh.product_id

          WHERE     oh.reference_no = 12345 
          AND       up.location_id = 4                      
          ";

在查询中,我根据引用号选择包的所有数量。

例如,在参考编号12345中,有三行三种产品,每种产品的数量不同。

Stock Ask来自oh.quantity

orders

  +---------------+--------------+------------+
    reference_no     product_id     quantity
  +---------------+--------------+------------+
      12345             1             30
      12345             2             10
      12345             3             20

但是,我们需要检查我们的表中是否有可用的数量或产品。

Stock Available

中的

stock_update

  +--------------+------------+
    product_id     quantity
  +--------------+------------+
         1             10
         2             15
         3             25

根据上面的两个表格,有一个产品的可用数量小于要求的数量。它位于1

的行或product_id中

如果条件是这样,那么我希望查询不返回任何内容或返回false。

如果只有所有产品和所要求的数量可用,则查询将返回true。

如何在我上面尝试的查询中执行此操作?非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

在你的评论之后,我得到了你想要的东西,我觉得它可能带有一些棘手的子查询但不合理。

我宁愿执行两个查询:

  1. 查明是否存在up.quantity < oh.quantity

    的情况
    SELECT 1
      FROM      stock_update up
      JOIN      orders oh
      ON        up.quantity < oh.quantity
      AND       up.package = oh.product_id
    
      WHERE     oh.reference_no = 12345 
      AND       up.location_id = 4
      LIMIT 1
    
  2. 如果没有(即上一个查询不返回任何结果),请执行原始查询

答案 1 :(得分:1)

请尝试此查询,如果任何产品的库存数量不足,则返回0:

SELECT  (SUM(CASE WHEN up.quantity >= oh.quantity THEN 1 ELSE 0 END) = COUNT(*)) AS inStock
        #up.quantity AS stockAble, oh.quantity AS stockAsk
FROM    stock_update up
JOIN    orders oh
ON      up.product_id = oh.product_id
#AND        up.quantity >= oh.quantity
WHERE   oh.reference_no = 12345;