1

我需要一些帮助来确定将两个表组合成一个表的 SQL。我想合并表格并在每个表格的不同行上显示数据,但我下面的内容只显示一行。

以下是表格:

CREATE TABLE tenant_invoices(
  invoice_id INT,
  col1 INT,
  col2 INT
)

CREATE TABLE tenant_payments(
  pmt_invoice_id INT,
  colA INT,
  colB INT
)

这是我需要创建的临时表:

CREATE TEMPORARY TABLE tenant_invoices
    SELECT * FROM invoices

CREATE TEMPORARY TABLE tenant_payments
    SELECT * FROM payments

select ti.*, tp.*
from tenant_invoices ti
left join tenant_payments tp
  on ti.invoice_id = tp.pmt_invoice_id
ORDER BY ti.invoice_date DESC;

这导致两个表合并在一起,但只创建了一行:

invoice_id   col1   col2    pmt_invoice_id   colA   ColB
1            ABC    XYZ     1                111    222

我希望表格能够将表格合并在一起,以便获得所有列,但是我希望将行分开而不是包含合并数据的一行,以便我可以以更合乎逻辑的方式循环遍历数据:

invoice_id   col1   col2    pmt_invoice_id   colA   ColB
1            ABC    XYZ     null             null   null
                            1                111    222 

有没有办法可以用 SQL 完成这个?

谢谢。

4

1 回答 1

3

为了达到这个结果...

invoice_id col1 col2 pmt_invoice_id colA ColB
1 ABC XYZ null null null
                            1 111 222

你可以UNION ALL这样使用:

SELECT invoice_id, col1, col2, NULL AS pmt_invoice_id, NULL AS colA, NULL AS col
FROM tenant_invoices
UNION ALL
SELECT NULL, NULL, NULL, pmt_invoice_id, colA, colB
FROM tenant_payments

如前所述,要将两张表简单地堆叠在一起,然后对齐列并使用UNION ALL. 如果要删除重复项,可以使用UNION.

于 2012-12-03T22:53:11.377 回答