Как отобразить данные с помощью SQL Join

0

привет всем, кого я хочу попросить о помощи для моего дела.

Первый основной продукт данных таблицы

id  | barcode       | product_name         | unit_kg |
====+===============+======================+=========+===
1   | 8995157800257 | Pandan Wangi CF 5kg  | 5       |
2   | 8995157800264 | Pandan Wangi CF 10kg | 10      |
3   | 8995157800271 | Pandan Wangi CF 20kg | 20      |
4   | 8995157800288 | Rojolele CF 5kg      | 5       |
5   | 8995157800301 | Rojolele CF 20kg     | 20      |
6   | 8995157800318 | SR CF 5kg            | 5       |
7   | 8995157800325 | SR CF 10kg           | 10      |
8   | 8995157800332 | SR CF 20kg           | 20      |

Вторая таблица данных detail_order

id  | barcode       | product_name         | pcs_order | date_order |
====+===============+======================+=========+==============+==
1   | 8995157800257 | Pandan Wangi CF 5kg  | 5         | 2018-01-01
2   | 8995157800257 | Pandan Wangi CF 5kg  | 2         | 2018-01-05
3   | 8995157800257 | Pandan Wangi CF 5kg  | 6         | 2018-02-01
4   | 8995157800264 | Pandan Wangi CF 10kg | 4         | 2018-02-02
5   | 8995157800264 | Pandan Wangi CF 10kg | 9         | 2018-02-03
6   | 8995157800271 | Pandan Wangi CF 20kg | 1         | 2018-02-04
7   | 8995157800271 | Pandan Wangi CF 20kg | 2         | 2018-02-05
8   | 8995157800271 | Pandan Wangi CF 20kg | 1         | 2018-02-10
9   | 8995157800288 | Rojolele CF 5kg      | 5         | 2018-02-15
10  | 8995157800288 | Rojolele CF 5kg      | 3         | 2018-02-16
11  | 8995157800318 | SR CF 5kg            | 8         | 2018-02-20
12  | 8995157800318 | SR CF 5kg            | 2         | 2018-02-25
13  | 8995157800325 | SR CF 10kg           | 10        | 2018-02-28
14  | 8995157800325 | SR CF 10kg           | 5         | 2018-03-01

Я хочу получить данные оборачивания из таблицы detail_order со своим штрих-кодом продукта, но даже если данные продукта в таблице mainproduct не находятся в таблице detail_order, я хочу, чтобы он отображался с более поздним total_order 0, если он не находится в detail_order Таблица. Меньше, чем указано ниже:

id_mainproduct  | barcode       | product_name         | total_order_pcs    |
================+===============+======================+====================+===
1               | 8995157800257 | Pandan Wangi CF 5kg  | 6                  |
2               | 8995157800264 | Pandan Wangi CF 10kg | 13                 |
3               | 8995157800271 | Pandan Wangi CF 20kg | 4                  |
4               | 8995157800288 | Rojolele CF 5kg      | 8                  |
5               | 8995157800301 | Rojolele CF 20kg     | 0                  |
6               | 8995157800318 | SR CF 5kg            | 10                 |
7               | 8995157800325 | SR CF 10kg           | 10                 |
8               | 8995157800332 | SR CF 20kg           | 0                  |

на самом деле я могу подключить две таблицы, но в разделе данных в mainproduct, у которого нет данных в detail_order, я не могу его отобразить, пожалуйста, помогите мне.

мой код:

SELECT mainproduct.id,
       mainproduct.barcode,
       mainproduct.product_name,
       SUM(R.pcs_order) as total_order
FROM
(
  SELECT barcode, pcs_order, date_order
  FROM detail_order
) AS R
LEFT JOIN mainproduct ON mainproduct.barcode = R.barcode
WHERE r.date_order BETWEEN '2018-02-01' AND '2018-02-28' GROUP BY mainproduct.id
ORDER BY mainproduct.id ASC
  • 1
    Похоже, вам нужно левое соединение, а не соединение.
  • 0
    Вы можете помочь мне для кода SQL?
Показать ещё 9 комментариев
Теги:
join

3 ответа

1
Лучший ответ

Независимо от ваших комментариев, у вас все еще есть соединение в неправильном порядке.

a LEFT JOIN b означает сохранение каждой записи, которая появляется в a, даже если в строке b нет соответствующей строки.

Если вам нужен объем продаж каждого продукта, даже если нет записей о продажах для продукта (с указанием нуля), вам нужны products LEFT JOIN sales.

Если вы хотите только подсчитать продажи в течение определенного времени, отфильтруйте продажи. Перед присоединением (sub, в вашем подзапросе).

SELECT
   mainproduct.id,
   mainproduct.barcode,
   mainproduct.product_name,
   COALESCE(SUM(R.pcs_order), 0)    AS total_order
FROM
   mainproduct
LEFT JOIN
(
  SELECT barcode, pcs_order, date_order
    FROM detail_order
   WHERE date_order BETWEEN '2018-02-01' AND '2018-02-28'
)
   AS R
      ON mainproduct.barcode = R.barcode
GROUP BY
   mainproduct.id
ORDER BY
   mainproduct.id ASC
  • 0
    простите меня за мою ошибку, я очень смущен в этом случае о том, как код, который я должен сделать, чтобы преуспеть с надеждой. код, который вы дали, был успешным с надеждой, спасибо за вашу помощь и обучение, мое дело теперь решено. большое спасибо
0

У вас может быть несколько запросов для одной и той же проблемы. Вы можете использовать это.

select p.barcode,p.product_name, coalesce(d.pcs_order, 0)
from (select barcode, sum(pcs_order) pcs_order from detail_order group by barcode) as d
right join mainproduct p on p.barcode = d.barcode
  • 0
    привет Chatar Singh спасибо за попытку помочь мне
0

Вам нужно присоединиться к своим столам и сделать агрегацию

select p.barcode,p.product_name, coalesce(sum(d.pcs_order),0)
from mainproduct p
left join detail_order d on p.barcode = d.barcode
group by p.barcode, p.product_name

демонстрация

  • 1
    Возможно, стоит прокомментировать ОП, почему это отличается от их кода. (У вас есть таблицы в правильном порядке, ОП соединял их в неправильном порядке ...)
  • 0
    Я исправил свой вопрос, нулевые данные недоступны, поскольку в таблице detail_order есть критерии даты начала и конца даты, необходимой для отображения.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню