2015-02-04 98 views
1
$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      
      "; 

在查询中,我根据引用号选择所有数量的包。如果其中一个字段不存在,则返回null mysql

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

oh.quantityStock Askorders

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

但是它需要检查,如果被询问的数量或该产品是在我们的表中。

Stock Availablestock_update

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

基于上述两个表中,有一个产品,其它的可用数量小于其要求的数量。它是在行或在

product_id如果条件如此,那么我希望查询返回什么也没有。

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

如何在查询我已经在上面尝试过吗?非常感谢你的帮助。

+0

实际与预期结果是什么?您的查询看起来不错,除了您可能想使用'> ='而不是'>' –

+0

@fschmengler我的查询仍然返回两行,因为一行不存在。我想要的是如果三者中的一个不存在,那么我希望查询不转任何行。 – klaudia

+0

根据您的示例数据,您的查询返回'null'又名'no row'。除了你可能想用'> ='代替'>' – RubahMalam

回答

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. 如果不是(即以前的查询不返回任何结果)的情况下, ,执行原始查询条件

+0

谢谢你的解决方案。但是通过上面的查询,现在如果所有股票都可用,它也不会返回任何行。 – klaudia

+0

这就是要点。正如我所说,**如果这不返回任何结果,执行原始查询** –

+0

如何做到这一点?请再次帮忙。 – klaudia

1

请尝试此查询,如果有任何o返回0 f产品没有足够的库存数量:

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; 
+0

这个查询的性能如何?因为当我在页面上运行这个查询时,其结果不如我在工作台上运行这样的结果准确。 – klaudia

+0

对不起@klaudia,我不明白查询在页面上运行时如何不如在工作台上运行时那么准确。它有不同的结果吗?性能将显着取决于您的数据库,索引等。在这里,我们显然在外面留下许多限制,并专注于你原来的问题。希望这可以帮助。 –

相关问题