即使结果不为空,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等
一切都很好用的语法,也有拼写错误,没有对表名,行等,这只是不想收集的所有数据,并返回空值,而不是数据
答
的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
。
+0
欢迎来到俱乐部! - 它不是我btw –
你知道'LEFT JOIN'是如何工作的吗?如果连接左侧的给定记录与连接右侧的任何记录不匹配,则右侧表格的列仍将出现,但值将全部为NULL。我不确定这里有什么问题。 –
错误的联接?你的意思是使用内连接而不是左连接? LEFT将包含来自Inventory的所有记录,仅包含与items_Prices匹配的记录,然后仅包含与之前和漫游器相匹配的记录。 INNER Join将确保记录存在于所有表中。 – xQbert
显示一些示例数据和表结构 – Jens