2014-02-24 30 views
0

如果這是一個愚蠢的問題,但很抱歉,我試圖從兩個不同的表中獲得結果,並且因爲其中一個表可能有零個記錄,我不知道如何繼續。下面是該查詢:從2個表中選擇時丟失行

SELECT aid.*, T.ItemId, T.Total, T.Stack 
FROM (SELECT ItemId, Stack, count(ItemId) as Total FROM auction_house WHERE Sale = 0 GROUP BY ItemId,  Stack) as T, ahbot_item_data aid 
WHERE T.ItemId = aid.ItemId 
AND T.Stack = aid.Stack 

基本上我想從援助表項目清單,並在表啊這些項目的當前計數。但由於計數可能只是零,因此可能不會返回該行。我想排和總計爲0.

預先感謝您^^ ;;

+0

看右或左連接。無論是否在另一個表中,這些類型的連接都會爲您提供一個表的結果。 http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins –

回答

0

與@Twelfth的說法類似,您希望有一個左外部聯接,它總是從左表中輸出數據,即使右表中沒有匹配的數據。

SELECT 
    aid.ItemId, 
    count(ah.ItemId) AS "Total", 
    aid.Stack 
FROM 
    ahbot_item_data aid 
    LEFT OUTER JOIN auction_house ah 
    ON (aid.ItemID = ah.ItemID AND aid.Stack = ah.Stack) 
GROUP BY 
    aid.ItemID, aid.Stack 
+0

然後有可能檢查「Total」是否> aid.LiveStock? –

+0

是的,你可以將它建立到子查詢中,類似於你在T的原始代碼中所做的類似。或者你可以使用類似於http://sqlfiddle.com/#!2/0f21c/4/的HAVING子句0 –

+0

確實,使用你的例子並添加一些缺失的部分(我自己的錯誤)並使用HAVING修復它:D謝謝大家的幫助! –

0

您正在使用舊的語法...我要切換到連接語法(更新,更接受...相同的效果,更易於閱讀)。你想要的是一個'外連接',它會產生沒有記錄的空值。我會安排表,我們將使用一個左外連接

SELECT aid.*, T.ItemId, T.Total, T.Stack 
FROM ahbot_item_data aid left join (SELECT ItemId, Stack, count(ItemId) as Total FROM auction_house WHERE Sale = 0 GROUP BY ItemId,  Stack) as T, 
on T.ItemId = aid.ItemId 
AND T.Stack = aid.Stack 

我不是語法完全肯定了...但它也可以使用!=做到這一點外連接的你使用過的語法(其中aid.itemID!= t.itemID,我認爲?)