2015-02-04 99 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,我不明白查詢在頁面上運行時如何不如在工作臺上運行時那麼準確。它有不同的結果嗎?性能將顯着取決於您的數據庫,索引等。在這裏,我們顯然在外面留下許多限制,並專注於你原來的問題。希望這可以幫助。 –

相關問題