2017-07-26 9 views
0

Oracle SQL問合せがあり、軽微な問題があります。アイテムに少なくとも1つの広告申込情報があるPO#があるかどうかを確認する必要があります。以下のクエリは動作しますが、transaction_linesの各行に対して結果が返されますが、結果は必要ありません。 PS DISTINCTを試しましたが、ODBCエラーが発生しました。Oracle(Netsuite)SQL 1つの結合制限の結果

SELECT ITEMS.NAME, INVENTORY_NUMBER.INVENTORY_NUMBER, INVENTORY_NUMBER.ON_HAND_COUNT, ITEMS.SALESDESCRIPTION, CONDITION.LIST_ITEM_NAME, 
BRAND_PARTNER.LIST_ITEM_NAME, PPROGRAM.LIST_ITEM_NAME, ENTITY.NAME, PO.TRANSACTION_NUMBER, INVENTORY_NUMBER.RECEIVED_COST, ITEMS.SALESPRICE, IR.TRANSACTION_NUMBER, 
INVENTORY_SOURCE.LIST_ITEM_NAME, LOCATIONS.NAME, INVENTORY_NUMBER.RECEIPT_DATE, PO.INTERNAL_MEMO, INVENTORY_NUMBER.REFERENCE_, TEST_RESULTS.LIST_ITEM_NAME, 
INVENTORY_NUMBER.TEST_FILE_LINK, INVENTORY_NUMBER.CONNECT_TRADE_ID, INVENTORY_NUMBER.SOLD_DATE, INVENTORY_NUMBER.SOLD_PRICE, INVENTORY_NUMBER.MEMO, ITEMS.UPC_CODE, ITEMS.MPN, 
ITEMS.ITEM_ID, INVENTORY_NUMBER.CLEI, INVENTORY_NUMBER.CERTIFICATION_REF_ID 
FROM INVENTORY_NUMBER 
INNER JOIN ITEMS ON INVENTORY_NUMBER.ITEM_ID = ITEMS.ITEM_ID 
INNER JOIN TRANSACTIONS AS PO ON INVENTORY_NUMBER.PURCHASE_ORDER_ID = PO.TRANSACTION_ID 
INNER JOIN TRANSACTIONS AS IR ON INVENTORY_NUMBER.ITEM_RECEIPT_ID = IR.TRANSACTION_ID 
INNER JOIN TRANSACTION_LINES ON PO.TRANSACTION_ID = TRANSACTION_LINES.TRANSACTION_ID 
INNER JOIN ENTITY ON TRANSACTIONS.ENTITY_ID = ENTITY.ENTITY_ID 
INNER JOIN CONDITION ON INVENTORY_NUMBER.CONDITION_ID = CONDITION.LIST_ID 
INNER JOIN BRAND_PARTNER ON INVENTORY_NUMBER.BRAND_PARTNER_ID = BRAND_PARTNER.LIST_ID 
INNER JOIN PPROGRAM ON INVENTORY_NUMBER.PROGRAM_ID = PPROGRAM.LIST_ID 
INNER JOIN INVENTORY_SOURCE ON INVENTORY_NUMBER.INVENTORY_SOURCE_ID = INVENTORY_SOURCE.LIST_ID 
INNER JOIN LOCATIONS ON INVENTORY_NUMBER.LOCATION_ID = LOCATIONS.LOCATION_ID 
INNER JOIN TEST_RESULTS ON INVENTORY_NUMBER.TEST_RESULTS_ID = TEST_RESULTS.LIST_ID 
WHERE INVENTORY_NUMBER.ON_HAND_COUNT IS NOT NULL AND ((INVENTORY_NUMBER.PURCHASE_ORDER_ID IS NULL) OR (INVENTORY_NUMBER.PURCHASE_ORDER_ID IS NOT NULL AND TRANSACTION_LINES.TRANSACTION_LINE_ID IS NOT NULL)) 
+2

それはあるexists句を使用することができますこのクエリで何が起こっているのかを把握することは不可能です。重要ではない部分を削除した場合、人々がクエリを理解するのに役立ちます。 –

+1

あなたの求めるものは明確ではありません。あなたは実例を挙げられますか?クエリは何を返しますか?なんでしょう ?アイテムに少なくとも1行のアイテムがあるPO#がある場合は、そのアイテムは理解できません。 – Cedias

+0

申し訳ありませんが、このクエリは、レポートに関連するアイテムとデータを取得します。結合は、すべてのテーブルをリンクするだけです。しかし、WHERE句では、POが存在するかどうかを宣言する必要があります。これを行うには、transaction_lineテーブルに参加する必要があります。私はそれを行うと、一意のシリアル番号を持つ項目のエントリが1つだけではなく、すべてのトランザクションラインアイテムに対して結果を返します。 – Andre

答えて

0

結果を制限するためにGROUP BYを使用することをお勧めします。また、クエリのトランザクションと対話している場合は、「メインライン」に基づく結果を制限することなく、ヘッダーレコードを受け取った後、個別の明細ごとにレコードを受け取ることを常に覚えておく必要があります。

保存された検索でこれを行っていた場合、条件を「main line = true」とすることができます。私はあなたのクエリを理解していないので、完全に私は、この制限をどこに置くか助言することはできません。

0

あなたもtransaction_linesに参加削除し、代わりにtl.TRANSACTION_LINE_ID IS NOT NULL

and exists (select 1 from transaction lines tl 
      where tl.transaction_id = po.transaction_id) 
関連する問題