+----+------------+----------------+--------+
| id | dateValue | particular | amount |
+----+------------+----------------+--------+
| 1 | 2017-02-02 | Cash Deposit | 1 |
| 2 | 2017-02-03 | Cheque Deposit | 2 |
| 3 | 2017-02-08 | Cash Deposit | 3 |
| 4 | 2017-02-07 | Product Sales | 4 |
+----+------------+----------------+--------+
+----+------------+------------+--------+
| id | dateValue | particular | amount |
+----+------------+------------+--------+
| 1 | 2017-05-07 | Factory | 6 |
| 2 | 2017-06-02 | Staff | 7 |
| 3 | 2017-06-03 | Travel | 8 |
+----+------------+------------+--------+
然后我用select * from income left join expenses on income.id = expenses.id查询数据库得到:
+----+------------+----------------+--------+----+------------+------------+--------+--+
| id | dateValue | particular | amount | id | dateValue | particular | amount | |
+----+------------+----------------+--------+----+------------+------------+--------+--+
| 1 | 2017-02-02 | Cash Deposit | 1 | 1 | 2017-05-07 | Factory | 6 | |
| 2 | 2017-02-03 | Cheque Deposit | 2 | 2 | 2017-06-02 | Staff | 7 | |
| 3 | 2017-02-08 | Cash Deposit | 3 | 3 | 2017-06-03 | Travel | 8 | |
| 4 | 2017-02-07 | Product Sales | 4 | | | | | |
+----+------------+----------------+--------+----+------------+------------+--------+--+
根据目前可用的信息,这可能是我能做的最好的了
您可以使用 Most simple code to populate JTable from ResultSet 或 Retrieving Data from JDBC Database into Jtable 之类的东西来构建 JTable ... 作为可用示例
如果第二张表的行数比第一张表多.. 记录将不会显示第二张表中的 id 多的记录 – raman dangol 8 小时前
另外,如果 ID 不一致,记录将会丢失。这就是为什么我说这不是一个小问题
那么在这些情况下,像FULL OUTER JOIN 这样的东西会更有用。但是,根据我掌握的信息,MySQL 不支持full outer join,因为这很有用。然而,基于How to do a FULL OUTER JOIN in MySQL?,我们可以做类似...
select * from income left join expenses on income.id = expenses.id union select * from income right join expenses on income.id = expenses.id where income.id is null
它可以生成类似的东西
+----+------------+----------------+--------+----+------------+------------+--------+
| id | datevalue | particular | amount | id | datevalue | particular | amount |
+----+------------+----------------+--------+----+------------+------------+--------+
| 1 | 2017-02-02 | Cash Deposit | 1.0 | 1 | 2017-05-07 | Factory | 6.0 |
| 2 | 2017-02-03 | Cheque Deposit | 2.0 | 2 | 2017-06-02 | Staff | 7.0 |
| 3 | 2017-02-03 | Cash Deposit | 3.0 | 3 | 2017-06-03 | Travel | 8.0 |
| 4 | 2017-02-03 | Product Sales | 4.0 | 4 | 2017-10-01 | Test 1 | 10.0 |
| 5 | 2017-10-02 | Test 2 | 20.0 | | | | |
+----+------------+----------------+--------+----+------------+------------+--------+
或者,如果您希望将事物与其“选定的面”保持一致,例如
select income.id, income.datevalue, income.PARTICULAR, income.AMOUNT,
expenses.id, expenses.datevalue, expenses.PARTICULAR, expenses.AMOUNT
from income join expenses on income.id = expenses.id
union all
select income.id, income.datevalue, income.PARTICULAR, income.AMOUNT,
null, null, null, null
from INCOME where not exists (select expenses.id from expenses where expenses.id = income.id)
union all
select null, null, null, null,
expenses.id, expenses.datevalue, expenses.PARTICULAR, expenses.AMOUNT
from expenses where not exists (select income.id from income where income.id = expenses.id)
这可以产生类似...的东西
+----+------------+----------------+--------+----+------------+------------+--------+
| id | datevalue | particular | amount | id | datevalue | particular | amount |
+----+------------+----------------+--------+----+------------+------------+--------+
| 1 | 2017-02-02 | Cash Deposit | 1.0 | 1 | 2017-05-07 | Factory | 6.0 |
| 2 | 2017-02-03 | Cheque Deposit | 2.0 | 2 | 2017-06-02 | Staff | 7.0 |
| 3 | 2017-02-03 | Cash Deposit | 3.0 | 3 | 2017-06-03 | Travel | 8.0 |
| 4 | 2017-02-03 | Product Sales | 4.0 | 4 | 2017-10-01 | Test 1 | 10.0 |
| | | | | 5 | 2017-10-02 | Test 2 | 20.0 |
+----+------------+----------------+--------+----+------------+------------+--------+
归根结底,这仍然是数据库问题。
为简单起见,您可以创建一个或多个数据库views 以简化查询