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

问题描述:

我试图使用2个不同的标识符从3个不同的表中获取信息。但不是返回明确的结果,而是返回我的数据而不是结果NULL。最奇怪的是,所有结果中有50%是好的,其他50%都缺少一个字段。即使结果不为空,SQL连接也会返回NULL

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

,这是数据库表的结构。 inventoryenter image description here

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

+4

你知道'LEFT JOIN'是如何工作的吗?如果连接左侧的给定记录与连接右侧的任何记录不匹配,则右侧表格的列仍将出现,但值将全部为NULL。我不确定这里有什么问题。 –

+0

错误的联接?你的意思是使用内连接而不是左连接? LEFT将包含来自Inventory的所有记录,仅包含与items_Prices匹配的记录,然后仅包含与之前和漫游器相匹配的记录。 INNER Join将确保记录存在于所有表中。 – xQbert

+0

显示一些示例数据和表结构 – Jens

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 JOINbots

+0

欢迎来到俱乐部! - 它不是我btw –