在oracle xe 11g中加入时无法显示具有相同id的所有记录

时间:2018-09-29 03:17:58

标签: sql oracle oracle11g

我在使用此查询时收到此消息,这有什么问题吗?

SELECT t.tanggal_transaksi, o.nama_lengkap, SUM(td.harga * td.qty) total
FROM transaksi t, transaksi_detail td, operator o
WHERE td.transaksi_id = t.transaksi_id AND o.operator_id = t.operator_id
GROUP BY t.transaksi_id

已更新: 在使用此查询使用@BarbarosÖzhan的答案后:

SELECT t.tanggal_transaksi, o.nama_lengkap, SUM(td.harga * td.qty) total
  FROM transaksi t
 INNER JOIN transaksi_detail td ON ( td.transaksi_id = t.transaksi_id )
 INNER JOIN operator o ON ( o.operator_id = t.operator_id )
 GROUP BY t.tanggal_transaksi, o.nama_lengkap;

数据已成功显示。但是,几乎没有发生任何问题,同一operator_id的值不能出现超过1次。这是示例数据:

+--------------+-------------+-------------------+
| TRANSAKSI_ID | OPERATOR_ID | TANGGAL_TRANSAKSI |
+--------------+-------------+-------------------+
|            1 |           5 | 09/29/2018        |
|            2 |           3 | 09/29/2018        |
|            3 |           3 | 09/29/2018        |
|            4 |           1 | 09/29/2018        |
|            5 |           1 | 09/29/2018        |
+--------------+-------------+-------------------+

使用query命令后,输出为:

+-------------------+------------------+--------+
| TANGGAL_TRANSAKSI |   NAMA_LENGKAP   | TOTAL  |
+-------------------+------------------+--------+
| 09/29/2018        | Lina Harun       | 419800 |
| 09/29/2018        | Titro Kusumo     | 484000 |
| 09/29/2018        | Muhammad Kusnadi | 402000 |
+-------------------+------------------+--------+

从操作员表中查看时,有2个具有相同operator_id的数据不可读

+-------------+------------------+
| OPERATOR_ID |   NAMA_LENGKAP   |
+-------------+------------------+
|           1 | Muhammad Kusnadi |
|           3 | Lina Harun       |
|           5 | Tirto Kusumo     |
+-------------+------------------+

1 个答案:

答案 0 :(得分:2)

您需要将列包括在SELECT列表t.tanggal_transaksio.nama_lengkap中,也要包括在GROUP BY列表中,但不要包括其他类似t.transaksi_id的列。因此,您可以使用以下内容而不会出现任何问题:

SELECT t.tanggal_transaksi, o.nama_lengkap, SUM(td.harga * td.qty) total
  FROM transaksi t
 INNER JOIN transaksi_detail td ON ( td.transaksi_id = t.transaksi_id )
 INNER JOIN operator o ON ( o.operator_id = t.operator_id )
 GROUP BY t.tanggal_transaksi, o.nama_lengkap;

或者这个:

SELECT t.transaksi_id, SUM(td.harga * td.qty) total
  FROM transaksi t
 INNER JOIN transaksi_detail td ON ( td.transaksi_id = t.transaksi_id )
 GROUP BY t.transaksi_id;

P.S。首选使用ANSI-92 JOIN标准,而不是老式的逗号型JOIN。