1

所以我有 2 张桌子、发票和发票项目。我想创建一个查询,将两者组合成一个报表的表。我遇到的问题是我的查询仅从 tblinvoiceitems 返回第一行,而不是所有适用的。请参阅下面的代码。谢谢!

以下是表格:

invoices
+------+----------+-------------+-------------+------------+----------+-------+---------+
|  id  |  userid  |   duedate   |  datepaid   |  subtotal  |  credit  |  tax  |  total  |
+------+----------+-------------+-------------+------------+----------+-------+---------+
| 662  | 436      | 2012-07-01  | 2012-06-05  | 1290.00    | 0.00     | 0.00  | 1290.00 |
+------+----------+-------------+-------------+------------+----------+-------+---------+
| 668  | 441      | 2012-07-01  | 2012-06-11  | 1290.00    | 0.00     | 0.00  | 1290.00 |
+------+----------+-------------+-------------+------------+----------+-------+---------+

invoiceitems
+------+-------------+----------+----------+---------+-----------------+----------+
|  id  |  invoiceid  |  userid  |   type   |  relid  |   description   |  amount  |
+------+-------------+----------+----------+---------+-----------------+----------+
| 1408 | 662         | 436      | Promo    | 436     | Setup Fee       | 295.00   |
+------+-------------+----------+----------+---------+-----------------+----------+
| 1409 | 662         | 436      |          | 0       | US Standard     | 995.00   |
+------+-------------+----------+----------+---------+-----------------+----------+
| 1425 | 668         | 441      | Promo    | 441     | Setup Fee       | 295.00   |
+------+-------------+----------+----------+---------+-----------------+----------+
| 1426 | 668         | 441      |          | 0       | US Standard     | 995.00   |
+------+-------------+----------+----------+---------+-----------------+----------+

我想要的表:

newtable
+------+----------+-------------+-------------+-------------+---------+-----------+------------+
|  id  |  userid  |  invoiceid  |   duedate   |  datepaid   |  setup  |  hosting  |  subtotal  |
+------+----------+-------------+-------------+-------------+---------+-----------+------------+
| 1    | 436      | 662         | 2012-07-01  | 2012-06-05  | 295.00  | 995.00    | 1290.00    |
+------+----------+-------------+-------------+-------------+---------+-----------+------------+
| 2    | 441      | 668         | 2012-07-01  | 2012-06-11  | 295.00  | 995.00    | 1290.00    |
+------+----------+-------------+-------------+-------------+---------+-----------+------------+

当前查询:

"INSERT INTO newtable SELECT
tblinvoices.id,
tblinvoices.userid,
tblinvoices.duedate,
tblinvoices.datepaid,
tblinvoices.subtotal,
tblinvoiceitems.invoiceid,
tblinvoiceitems.amount
FROM tblinvoices
INNER JOIN tblinvoiceitems ON tblinvoices.id = tblinvoiceitems.invoiceid";
4

2 回答 2

0

使用不同的 2 个 LEFT JOIN 和 WHERE 子句的组合。

SELECT DISTINCT <***>
LEFT JOIN invoiceitems ii0 ON ii0.id=i.invoiceid
LEFT JOIN invoiceitems ii1 ON ii1.id=i.invoiceid
WHERE ii0.description = 'Setup Fee'
  ANN ii1.description = 'US Standard'

此外,您最好创建单独的描述表和 descriptionInvoiceItemRelation 表。

http://en.wikipedia.org/wiki/Database_normalization

于 2012-06-14T15:17:11.010 回答
0

你可以试试:

SELECT 
  i.id AS InvoiceID, i.userid, ii.invoiceid, i.duedate, 
  i.datepaid, i.setup, i.hosting, i.subtotal
FROM
  invoices i 
INNER JOIN 
  invoiceitems ii ON i.id = ii.id
于 2012-06-14T15:18:31.860 回答