@roflanPominki

Из-за чего может быть null в выводе таблице после команды join?

use PhonesShop

select *
from Orders LEFT JOIN Customers on Orders.CustomerCode = Customers.CustomerCode
LEFT JOIN Accessories on Orders.AccessorieCode1 = Accessories.AccessorieCode and Orders.AccessorieCode2 = Accessories.AccessorieCode and Orders.AccessorieCode3 = Accessories.AccessorieCode
LEFT JOIN Services on Orders.ServiceCode1 = Services.ServiceCode and Orders.ServiceCode2 = Services.ServiceCode and Orders.ServiceCode3 = Services.ServiceCode
LEFT JOIN Workers on Orders.WorkerCode = Workers.WorkerCode

Я вроде как понял что это из-за того что я ничего не сделал со столбцами что остались, но не могу понять как решить эту проблему.6206b441f26fa576474152.png
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Akela_wolf
Extreme Programmer
Когда вы пишете
LEFT JOIN Accessories on 
  Orders.AccessorieCode1 = Accessories.AccessorieCode 
  and Orders.AccessorieCode2 = Accessories.AccessorieCode 
  and Orders.AccessorieCode3 = Accessories.AccessorieCode

Вы требуете от СУБД "найди в таблице Accessories записи у которых AsseccorieCode совпадает с Orders.AccessorieCode1 и Orders.AccessorieCode2 и Orders.AccessorieCode3, а если не найдешь - то впиши NULL-ы". Вы действительно хотели сказать что поля Orders.AccessorieCode{1,2,3} должны иметь одно и тоже значение, равное Accessories.AccessorieCode? Я так подозреваю, что в БД нет строк, удовлетворяющих этому условию, вот вы и получаете пустые строки.

Как решить: подумать еще раз что вы хотите иметь в выборке. Я так подозреваю, там должно быть OR. Accessories.AccessorieCode = Orders.AccessorieCode1 или Orders.AccessorieCode2 или Orders.AccessorieCode3

С Services аналогично.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы