【问题标题】:Outer join multiple table外连接多个表
【发布时间】:2015-02-05 06:26:19
【问题描述】:

我有 4 个表要加入:

tbl_transaksi_header
--------------------
kode_transaksi
kode_user
nama_penerima
email_penerima
alamat_penerima
bank
telpon


tbl_konfirmasi
--------------------
id
kode
member
namarekening

tbl_user
-------------------
kode_user
username_user

tbl_transaksi_detail
---------------------
kode_transaksi
harga
jumlah
status

我想在 nama_rek 中显示包括 NULL 在内的所有数据。

我试过这个:

SELECT t.status, t.kode_transaksi kode, u.username_user nama_user, t.nama_penerima penerima, t.telpon, t.bank, sum(d.harga*d.jumlah) total,k.namarekening nama_rek
FROM tbl_transaksi_header t
    JOIN tbl_user u
        ON t.kode_user=u.kode_user
    JOIN tbl_transaksi_detail d
        ON t.kode_transaksi=d.kode_transaksi
    LEFT OUTER JOIN tbl_konfirmasi k
        ON t.kode_transaksi=k.kode

工作正常但不显示空结果,只显示 1 行结果。我想要这样的东西:

status  kode    nama_user   penerima    telpn   bank    total   nama_rek
xxx     xxx     xxx         xxx         xxx     xxx     xxx     NULL
xxx     xxx     xxx         xxx         xxx     xxx     xxx     NULL
xxx     xxx     xxx         xxx         xxx     xxx     xxx     yyy
xxx     xxx     xxx         xxx         xxx     xxx     xxx     NULL

样本数据:

kode_transaksi  kode_user   nama_penerima   email_penerima  alamat_penerima bank    telpon
kd1             1           john            some@email.com  florida         Bank A  088833221
kd2             2           elsa            some@email.com  uk              Bank B  088833222
kd3             1           roy             some@email.com  manhattan       Bank C  088833223

id  kode    member  namarekening
1   kd1     paul    paul

kode_user   username_user
1           paul
2           elena

kode_transaksi  harga   jumlah  status
kd1             10      2       process
kd1             5       2       process
kd1             5       1       process
kd2             4       3       pending
kd2             3       4       pending
kd3             2       3       pending

我想要这个输出:

status  kode    nama_user   penerima    telpon      bank    total   nama_rek
process kd1     paul        john        088833221   Bank A  35      paul
pending kd2     elena       elsa        088833222   Bank B  24      NULL
pending kd2     elena       roy         088833223   Bank C  6       NULL

【问题讨论】:

    标签: mysql sql database join


    【解决方案1】:

    您的加入很好;问题是您的选择中有一个SUM() 而没有GROUP BY。试试这个:

    SELECT  t.kode_transaksi kode, u.username_user nama_user, t.nama_penerima penerima, t.telpon, t.bank, sum(d.harga*d.jumlah) total,k.namarekening nama_rek
    FROM tbl_transaksi_header t
        JOIN tbl_user u
            ON t.kode_user=u.kode_user
        JOIN tbl_transaksi_detail d
            ON t.kode_transaksi=d.kode_transaksi
        LEFT OUTER JOIN tbl_konfirmasi k
            ON t.kode_transaksi=k.kode
    GROUP BY
        t.kode_transaksi, u.username_user, t.nama_penerima , t.telpon, t.bank,k.namarekening 
    

    【讨论】:

    • 仅适用于 GROUP BY t.kode_transaksi。提前致谢
    • 是的.... 通常对所有未聚合的字段进行 GROUP BY 的良好做法。否则一些 RBDMS 会失败(对我来说,这比允许它更好)。
    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2015-03-13
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多