несколько объединений для двух таблиц, содержащих fk

Вопрос:

Я столкнулся с странным поведением, которое я должен интерпретировать неправильно, Учитывая, что компьютеры всегда выполняют именно то, что вы им рассказываете, я должен сказать это неправильно 🙂

Вариант использования:
У меня есть таблица под названием orders_details, состоящая из столбцов, представляющих интерес, как внешних ключей, order_id и product_id.

У меня также есть таблица называется orders которых имеет PK в order_id и таблицу с именем product_details что имеет PK из product_id колонны.

Требование:

Выделите все заказы с их соответствующей детализацией заказа и деталями продукта.

То, что я пробовал:

SELECT ord.shipping_ids, ord.order_id, ord.firstname, ord.lastname, ord.order_id,
ord.payment_id, det.product_id, ord.timestamp, prd.product

FROM  'cscart_orders' AS ord

LEFT JOIN cscart_order_details AS det ON ord.order_id = det.order_id

LEFT JOIN cscart_product_details AS prd ON prd.product_id = det.product_id

Теперь эти результаты получают null для всех столбцов product_details, поэтому я не получаю то, что мне нужно.

Если я заменил второе соединение на внутреннее соединение, я получаю поврежденные данные (несколько копий каждой строки без логического порядка, который я заметил).

Итак, что мне не хватает? Разве это не так, как должны работать объединения?

Редактировать:

http://sqlfiddle.com/#!2/f98463/2 -sqlfiddle, Никогда не знал, что скрипта существует для sql, извините за то, что она не отправила ее в первую очередь.

Второе редактирование:

в моих таблицах БД были проблемы с целостностью данных 🙁 кто-то неправильно настроил FK и PK, мой первоначальный запрос действительно работает с образцовыми данными, спасибо, что указал мне в нужное место, чтобы проверить себя

Ответ №1

Ваш заданный запрос отлично работает на sql-скрипте Если вы даете ожидаемый результат, чтобы мы могли вам помочь.

SELECT ord.shipping_ids, ord.order_id, ord.firstname, ord.lastname, ord.order_id,
ord.payment_id, det.product_id, ord.timestamp, prd.product

FROM  'cscart_orders' AS ord

LEFT JOIN cscart_order_details AS det ON ord.order_id = det.order_id

LEFT JOIN cscart_product_details AS prd ON prd.product_id = det.product_id

Оцените статью
TechArks.Ru
Добавить комментарий