Результат множественного внутреннего объединения без ошибок - PullRequest
0 голосов
/ 26 ноября 2018

Привет, разработчик. Я новичок в "продвинутом" SQL. Я пробовал один, но я не понимаю, как получить хороший результат.

Я попытаюсь взять информацию из 4 таблиц в той же БД,Первая таблица items имеет только идентификатор и имя.Две другие таблицы берут идентификатор из items для извлечения данных.В последних таблицах для вывода данных используются одни данные из items_buy.

Наконец, я объединяю 2 столбца из 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 или на моем сервере.

The output must be print in a simple html table screen here

Для того, чтобы: ID / NAMEITEM / PRICE / SELLINGPRICE / NAME из concat

Если вам нужно больше, некоторые данные испытаний: https://pastebin.com/6Bs4kbN9

1 Ответ

0 голосов
/ 26 ноября 2018

Я запустил ваши тестовые данные и запустил ваш скрипт против них.Как я уже говорил в своем комментарии, проблема заключается в 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 не имеет результата и, следовательно,не производит вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...