2014-07-23 23 views
-1

錯誤突出顯示問題在主查詢的WHERE子句前面。我不知道我缺少什麼,任何幫助將不勝感激。SQL中的ORA-00905錯誤

SELECT /*+ use_hash (doi,seg,v) */ 
doi.ORDER_ID AS "PO" 
, doi.DISTRIBUTOR_ID AS "Vendor ID" 
, doi.ISBN AS "ASIN" 
, doi.QUANTITY_ORDERED AS "Quantity Confirmed" 
, v.VENDOR_NAME AS "Vendor" 
FROM D_DISTRIBUTOR_ORDER_ITEMS doi 
LEFT JOIN VENDORS v 
JOIN (SELECT /*+ use_hash */ 
    psm.ASIN 
    FROM PRODUCT_SEGMENT_MEMBERSHIP psm 
    WHERE psm.SEGMENT_ID = 784885) seg 
ON doi.ISBN = seg.ASIN 
AND doi.DISTRIBUTOR_ID = v.VENDOR_ID 
WHERE doi.ORDER_DAY LIKE 2009/04/06 
ORDER BY seg.ASINSIN 
+2

您真的希望我們搜索手冊來查找'ORA-00905'的完整信息嗎? –

+0

它缺少關鍵字錯誤,我的不好。 – jlash027

+0

是的,在「LEFT JOIN VENDORS v」之後,您錯過了「on ...」字樣。 –

回答

0

您需要從where子句中移動連接條件doi.DISTRIBUTOR_ID = v.VENDOR_ID到from子句和 特別是LEFT JOIN VENDORS v依次如下:

SELECT 
    /*+ use_hash (doi,seg,v) */ 
    doi.order_id   AS "PO" , 
    doi.distributor_id AS "Vendor ID" , 
    doi.isbn    AS "ASIN" , 
    doi.quantity_ordered AS "Quantity Confirmed" , 
    v.vendor_name  AS "Vendor" 
FROM d_distributor_order_items doi 
LEFT JOIN vendors v 
ON doi.distributor_id = v.vendor_id 
JOIN 
    (SELECT 
    /*+ use_hash */ 
    psm.asin 
    FROM product_segment_membership psm 
    WHERE psm.segment_id = 784885 
) seg 
ON doi.isbn    = seg.asin 
WHERE trunc(doi.order_day) = '2009/04/06' 
ORDER BY seg.asinsin 

我修飾並假設你想截斷日期以代替使用類似的條件(沒有意義)。

+0

任何有關在該查詢中可能存在並行的地方的想法? – jlash027

2

更換

WHERE doi.ORDER_DAY LIKE 2009/04/06

通過

WHERE doi.ORDER_DAY LIKE '2009/04/06' 
+0

很好,但遺憾的是我仍然得到相同的錯誤。在相同的位置。儘管感謝@yassine__ – jlash027