2015-07-02 34 views
0
SELECT 

    daf.id as affiliate_id, 

    daf.name as affiliate_name, 

    dal.name as allocation_name, 

    dal.id as allocation_id, 

    dal.allocation,dal.price, 

    (select lead_price from paul.affiliates_price where affiliate_id = daf.id and allocation_id = dal.id) as lead_price, 

    (select live from paul.affiliates_price where affiliate_id = daf.id and allocation_id = dal.id) as live, 

    (select allocation from paul.affiliates_price where affiliate_id = daf.id and allocation_id = dal.id) as allocation 

FROM 

    degreeamerica.affiliates daf, degreeamerica.allocations dal; 

ORDER BY daf.id; 

任何人都可以幫助優化此查詢使用多列子查詢嗎?請幫忙!!!使用多列子查詢優化查詢

我已經嘗試過這樣的:

SELECT 

    daf.id as affiliate_id, 

    daf.name as affiliate_name, 

    dal.name as allocation_name, 

    dal.id as allocation_id, 

    dal.allocation,dal.price 

FROM 

    degreeamerica.affiliates daf, degreeamerica.allocations dal 

JOIN 

    (select pap.lead_price,pap.live, pap.allocation_id,pap.affiliate_id from paul.affiliates_price pap) pafp 

ON (dal.id=pafp.allocation_id and daf.id=pafp.affiliate_id) 

ORDER BY daf.id; 

其造成的錯誤。未知的daf.id 我使用笛卡兒積與多個列子查詢。 我已經花了8到9個小時。請幫忙。 告訴我第二個錯誤或爲我優化第一個錯誤。 請幫忙。

+0

看起來你可以用做一個連接上affiliate_id = daf.id和allocation_id = dal.id – reptilicus

+0

paul.affiliates_price它應該是一個笛卡爾聯接是不是有一個你可以加入的密鑰? –

+0

我有三個表1)Affiliates_price 2)分支機構3)分配。我想要的是1)我需要在分配表中映射每個分支機構的所有分配。 2)然後使用我們從步驟1中的笛卡爾產品獲得的allocation_id和affiliate_id的組合來查找paul.affiliates_price的lead_price,live等。 –

回答

1

我覺得這會給你想要的

SELECT daf.id as affiliate_id, 
    daf.name as affiliate_name, 
    dal.name as allocation_name, 
    dal.id as allocation_id, 
    dal.allocation 
    ,dal.price 
    ,ap.lead_Price 
    ,ap.live 
    ,ap.allocation 
FROM 

    degreeamerica.affiliates daf 
    JOIN paul.affiliates_price ap 
    ON daf.id = ap.affiliate_id 
    JOIN degreeamerica.allocations dal 
    ON dal.id = ap.allocation_id 

ORDER BY daf.id; 
+0

我已經試過這個,但問題是首先我需要找到笛卡爾「degreeamerica.affiliates daf」和「degreeamerica.allocations dal」的產品,以便我可以在分配表中映射每個分支機構的所有分配。 –

+0

然後需要應用多列子查詢來從paul.affiliates_price表中獲取一些列。 –

+0

你是什麼意思?上面的查詢可以獲得您要求的所有列嗎?你還想要什麼其他的專欄? –

0

你可以試試這個東西。不知道它是否真的優化了任何東西。

SELECT 
    daf.id as affiliate_id, 
    daf.name as affiliate_name, 
    dal.name as allocation_name, 
    dal.id as allocation_id, 
    dal.allocation, 
    dal.price, 
    p.lead_price, 
    p.live, 
    p.allocation 
FROM 
    degreeamerica.affiliates daf, degreeamerica.allocations dal, paul.affiliates_price p 
WHERE 
    p.affiliate_id = daf.id and p.allocation_id = dal.id 
ORDER BY 
    daf.id 

您還可以CROSS JOINaffiliatesallocations然後LEFT JOIN affiliates_price

SELECT 
    daf.id as affiliate_id, 
    daf.name as affiliate_name, 
    dal.name as allocation_name, 
    dal.id as allocation_id, 
    dal.allocation, 
    dal.price, 
    p.lead_price, 
    p.live, 
    p.allocation 
FROM 
    degreeamerica.affiliates daf 
    CROSS JOIN degreeamerica.allocations dal 
    LEFT JOIN paul.affiliates_price p ON p.affiliate_id = daf.id and p.allocation_id = dal.id 
ORDER BY 
    daf.id 
+0

它返回與Holmes IV相同的結果集回答:( –