即使结果不为空,SQL连接也返回NULL

时间:2016-08-02 13:35:29

标签: mysql sql join

我试图使用2个不同的标识符从3个不同的表中获取信息。但是,不是返回清晰的结果,而是使用NULL而不是结果返回数据。而最奇怪的部分是,所有结果中有50%是好的,而另外50%则缺少一个字段。

SELECT inventory.exterior, 
       inventory.steamid, 
       inventory.icon, 
       inventory.id, 
       inventory.name, 
       inventory.steam_item_id, 
       items_prices.price, 
       bots.id AS botID 
FROM   inventory 
       LEFT JOIN items_prices 
              ON items_prices.id = inventory.steamanalyst_id 
       LEFT JOIN bots 
              ON bots.steamid = inventory.steamid 
WHERE  inventory.steamid IN ( 123, 123, 123, 123, 
                              123 ... , 123 ) 
ORDER  BY items_prices.price DESC 
LIMIT  100 offset 0 

所以这让我回答: 而不是NULL s应该是数字,如1,3,7,9等。

enter image description here

这是数据库表的结构。 inventory enter image description here

语法一切都很好,表名,行等拼写没有错误。它不想收集所有数据并返回空值而不是数据

1 个答案:

答案 0 :(得分:0)

NULL是因为LEFT JOIN。如果您不想看到它们,请使用INNER JOIN

SELECT i.exterior, i.steamid, i.icon, i.id, i.name, i.steam_item_id, 
       ip.price, b.id AS botID 
FROM inventory i JOIN
     items_prices ip 
     ON ip.id = i.steamanalyst_id JOIN
     bots b 
     ON b.steamid = i.steamid 
WHERE i.steamid IN ( 123, 123, 123, 123, 
                      123 ... , 123 ) 
ORDER BY ip.price DESC 
LIMIT 100 OFSET 0; 

如果您想要所有记录,即使bots表中没有匹配项,也只需使用LEFT JOIN bots