从2个表中选择时缺少行

时间:2014-02-24 20:03:54

标签: sql

嗨,对不起,如果这是一个愚蠢的问题,但我试图从两个不同的表中获得结果,因为其中一个可能没有记录,我不知道如何继续。这是查询:

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

基本上我想从援助表中获取一个项目列表,以及ah表中这些项目的当前计数。但由于计数可能只是零,因此可能不会返回该行。我希望行和总计为0。

提前谢谢^^ ;;

2 个答案:

答案 0 :(得分: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我认为?)

答案 1 :(得分: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