您好,开发人员是我使用“高级” SQL的新手,但我自己尝试过,但是我不知道如何获得良好的结果。
我将尝试从同一数据库的4个表中获取信息。 第一个表项仅具有ID和名称。 另外2个表格从项目获取ID以提取数据。 最后一张表从items_buy中获取一个数据,以打印另一数据。
最后我从2个DB合并了2列,以获取完整的信息。
SELECT items.id, items.name, items_buy.item_cost AS item_cost, items_sales.item_price AS item_price, CONCAT(trader.name, planet.name) AS name_point
FROM ((((items
INNER JOIN items_buy ON items_buy.id = items.id)
INNER JOIN trader ON trader.id = items_buy.name_point)
INNER JOIN items_sales ON items_sales.id = items.id)
INNER JOIN planet ON planet.id = trader.planet)
WHERE items.id = 1;
我不知道如何使它工作,她没有在SQLyog或我的服务器上返回错误。
顺序: concat的ID / NAMEITEM / PRICE / SELLINGPRICE / NAME
如果您需要更多,请提供一些测试数据: https://pastebin.com/6Bs4kbN9
答案 0 :(得分:0)
我已经运行了您的测试数据,并针对该数据运行了脚本。正如我在评论中建议的那样,问题出在您使用的INNER JOIN
上。
我不确定您是否知道,但是在使用INNER JOIN
时,如果当前行的联接表为NULL,则将一无所有返回。
如果将查询修改为使用LEFT JOIN
,则无论连接的表是否为NULL,您都会看到可用的结果:
SELECT items.id, items.name, items_buy.item_cost AS item_cost, items_sales.item_price AS item_price, CONCAT(trader.name, planet.name) AS name_point
FROM ((((items
LEFT JOIN items_buy ON items_buy.id = items.id)
LEFT JOIN trader ON trader.id = items_buy.name_point)
LEFT JOIN items_sales ON items_sales.id = items.id)
LEFT JOIN planet ON planet.id = trader.planet)
WHERE items.id = 1;
这将产生:
1 Agricium 24.45 25.6 NULL
1 Agricium 24.6 25.6 NULL
在您的示例中,问题在于与trader
或planet
的联接没有结果,因此不产生任何输出。