2016-07-15 4 views
0
   SELECT * 
       FROM fabric_restock AS fabr 
       LEFT JOIN fabric_po AS fabpo 
       ON fabpo.fab_id = fabr.fab_id 
       WHERE 
       fabr.fab_id NOT IN (  
       SELECT fabpo.fab_id 
       FROM 
       fabric_po fabpo 
       WHERE 
       fabpo.status <= 1 
       AND 
       fabpo.fab_id IS NOT NULL 
       ) 
       AND 
       fabr.restock_ten <= fabpo.qty 

//完全なクエリはnullを返しますか?サブクエリがレコードを返さないときないオペレータでのMySQLの中には、副問い合わせが行を返さないが、またはヌル</p>私はこれをどのように修正すればよい <p>を返したときにNULL

はそれではなく、外側のクエリからすべてのレコードを返す必要があります

編集:元のクエリ:

   SELECT * 
       FROM fabric_restock AS fabr 
       LEFT JOIN fabric_po AS fabpo ON fabpo.fab_id = fabr.fab_id 
       WHERE 
       fabr.fab_id NOT IN (
       SELECT fabpo.fab_id 
       FROM 
       fabric_po fabpo 
       JOIN 
       fabric_challan fabchallan 
       ON 
       fabpo.po_num = fabchallan.po_num 
       WHERE 
       fabchallan.challan_num 
       NOT IN (SELECT challan_num FROM fabric_grn) 
       AND 
       fabpo.status <= 1 
       ) 
       AND 
       fabr.restock_ten <= fabpo.qty 

サンプルデータ:

# fab_id, fabric_mother_id, qty_mother, cluster, qty, cf_thirty, cf_ten, cf_three, cf_cluster, sellout_thirty, sellout_ten, sellout_three, num_good_sku, num_coll, num_collection_p, num_sale, new_cf, percentile, restock_thirty, restock_ten, restock_three, status, num_new, parent, lace_type, po_id, po_num, fab_id, vendor_code, color_code, qty, estimated_price, po_date, arrival_date, estimated_date, composition, material, type, inType, status, gsm, notes, image, approveStatus, approve_date, shrinkage, fabric_mother_id, qty_type, main_construction, place_order_date, width, vendor_comments, email_send, wash, brand 
FAB1001, SBL104, 10.00, cluster, 10.00, 10.00, 10.00, 10.00, 10, 10.00, 10.00, 10.00, 10, 10, 10, 10, 10.00, 10.00, 10.00, 10.00, 10.00, 0, 10, 1, Washed, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
FAB1002, SBL101, 20.00, cluster1, 20.00, 20.00, 20.00, 20.00, 20, 20.00, 20.00, 20.00, 20, 20, 20, 20, 20.00, 20.00, 20.00, 20.00, 20.00, 0, 20, 2, Bleached, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
FAB1003, SBL102, 30.00, cluster2, 30.00, 30.00, 30.00, 30.00, 30, 30.00, 30.00, 30.00, 30, 30, 30, 30, 30.00, 30.00, 30.00, 30.00, 30.00, 0, 30, 3, RFD, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
FAB1004, SBL103, 40.00, cluster3, 40.00, 40.00, 40.00, 40.00, 40, 40.00, 40.00, 40.00, 40, 40, 40, 40, 40.00, 40.00, 10.00, 10.00, 10.00, 0, 40, 4, Dyed, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 

fabpoテーブル:空現時点では

+0

必須[NOT INの危険](http://stackoverflow.com/a/32175659) – Drew

+0

@Drew:私はそれを理解ではなく、この特定のクエリが –

+0

をEXISTS交換する方法がわからないあなたが提供することができますいくつかのサンプルデータと期待される結果?私はあなたが何をしようとしているのか推測しましたが、今私はそれが正しいかどうか確信していません。 – Philipp

答えて

1

空のテーブルに参加しています。大丈夫です。

しかし、後で、テーブルの値と結合テーブルのnullフィールドを比較しようとしていますが、これは機能しません。

fabr.restock_ten <= fabpo.qty 

fabpoテーブル:現時点で空

私はそれは少し奇妙ですが、あなたは(、fabpo.qtyにnullをチェックすることで、この状況を扱うことができると思います、多分唯一の理由は、私ドンすべての列名の意味を理解している)

AND (fabr.restock_ten <= fabpo.qty OR fabpo.qty IS NULL) 
+0

更新しました。そのとおりです。そのための回避策は何でしょうか?サブクエリでrestock_tenを使用することはできませんが、現在はfabpo.qtyも使用できません。私は何をすべきか? –

+1

nullをチェックするか、 'fabr.restock_ten <= IFNULL(fabpo.qty、0)'を使用してnullを0にすることができますが、結果は得られません。いくつかの非常に高い値も、結果を得るために) – Philipp

+0

素晴らしい。ありがとう –

関連する問題