2016-05-25 46 views
0

有沒有辦法更改此sql語句以返回它找到的結果?基本上現在orderprc.item_noorderprc.cust_no並不總是存在於表中。所以,如果他們不我的查詢不返回任何東西。PHP&SQL問題:當它不返回某些字段時,需要回顯所有可能的結果

當他們不存在時,我想要做的事情就是迴應找到的所有事物,但只留下其餘的空白。我在桌子裏迴應這些。有什麼建議麼?讓我知道你是否需要更多信息。

SELECT 
    ordernumber.ord_num, 
    lineitem.item_no, 
    lineitem.item_desc_1, 
    ordernumber.cus_no, 
    lineitem.unit_price, 
    cic.sman, 
    orderprc.description 
FROM ordernumber JOIN lineitem 
ON ordernumber.ord_num = lineitem.ord_num 
JOIN cicmpy ON ordernumber.cus_no = cic.debcode 
JOIN orderprc ON ordernumber.cus_no = orderprc.cust_no 
WHERE ordernumber.ord_num = $multi_orders 
    AND orderprc.item_no = lineitem.item_no 
    AND orderprc.cust_no = ordernumber.cus_no 
    AND getdate() between start_dt and end_dt 
+0

那麼你需要明確允許'或'結果。 '...和o.item_no = l.item_no或l.item_no IS NULL',或者只是讓你的連接成爲'left'連接 –

+0

所以我需要爲orderprc.description回顯0或NULL,當沒有記錄時item_no或cust_no的orderprc表,對此有何建議?我試着用OR OR.Description是NULL,但它沒有工作。 – Ryan

回答

0

是,使用一個外連接,而不是一個INNER JOIN(SQL語句中作爲任一LEFT JOINRIGHT JOIN闡明)。當您只使用術語JOIN時,它默認爲INNER JOIN。

在您的例子,SQL語句將如下所示:

SELECT ordernumber.ord_num, lineitem.item_no, lineitem.item_desc_1, 
    ordernumber.cus_no, lineitem.unit_price, cic.sman, orderprc.description 
FROM ordernumber 
    JOIN lineitem ON ordernumber.ord_num = lineitem.ord_num 
     JOIN cicmpy ON ordernumber.cus_no = cic.debcode 
      LEFT JOIN orderprc ON ordernumber.cus_no = orderprc.cust_no 
WHERE ordernumber.ord_num = $multi_orders 
    AND orderprc.item_no = lineitem.item_no 
    AND orderprc.cust_no = ordernumber.cus_no 
    AND getdate() BETWEEN start_dt AND end_dt 
+0

對op的一點解釋:LEFT JOIN將返回表中所有記錄到聯接語句的左側,而不管這些記錄中的任何一個在右表中是否匹配。 RIGHT JOIN做相反的事。另一方面,INNER JOIN(或只是JOIN)要求兩個表都匹配返回的結果。 – Typel

+0

所以orderprc.description是我需要返回null的記錄,如果orderprc.item_no和orderprc.cust_no沒有記錄。任何想法如何做到這一點?我嘗試添加或orderprc.description在兩行之後爲空。但它仍然沒有返回,我還像你提到的那樣添加了左連接。 – Ryan

相關問題