У меня есть две таблицы счетов-фактур и счетов-фактур, я хочу объединить две таблицы в отношении каждого идентификатора счета-фактуры.

Я пытался написать SQL-запрос, но это неправильно.

SELECT invoice.invoice_id, invoice_product.product_name
FROM invoice, invoice_product
WHERE invoice.invoice_id = invoice_product.invoices_id

Я хочу показать свой фактический результат, как это.


Invoice_id | Invoice_name | Product_name                | Created Date
========== |============= |=============================|==============
   1       |    Test 1    |   Product1 ,product 2       | 2019-05-02
   2       |    Test 2    |    New Product ,New Product | 2019-05-02

invoice таблица:

enter image description here

invoice_product таблица:

enter image description here

1
user9923440 2 Май 2019 в 13:28

3 ответа

Лучший ответ

Использовать group_concat()

SELECT invoice.invoice_id, group_concat(invoice_product.product_name)
FROM invoice join  invoice_product
on invoice.invoice_id = invoice_product.invoices_id
group by invoice.invoice_id
0
Fahmi 2 Май 2019 в 10:35

Вам нужно использовать GROUP_CONCAT, чтобы получить список подобных продуктов, группируя по номеру счета. Это будет работать:

SELECT i.invoice_id, i.invoice_name, GROUP_CONCAT(ip.product_name) AS products, i.created_at
FROM invoice i
JOIN invoice_product ip ON i.invoice_id = ip.invoices_id
GROUP BY i.invoice_id

Выход:

invoice_id  invoice_name    products                        created_at
1           Test 1          Product 1,Product 2             2019-05-02 00:00:00
2           Test 2          Product New,Product New New     2019-05-02 00:00:00

Демо на dbfiddle

Обратите внимание, что неявный синтаксис JOIN, использующий запятую, в течение некоторого времени устарел, вместо него лучше писать явные JOIN.

1
Nick 2 Май 2019 в 11:03

Избегайте соединения с вашим фактическим синтаксисом, это слишком старый. Я не рекомендую иметь неатомарные значения, но функция GROUP_CONCAT делает всю работу за вас.

SELECT invoice.invoice_id, GROUP_CONCAT(IP.product_name), I.created_at
FROM invoice AS I
JOIN invoice_product AS IP
    ON I.invoice_id = IP.invoices_id
GROUP BY IP.invoices_id
1
Arnaud Peralta 2 Май 2019 в 10:51