簡體   English   中英

單行子查詢返回多個Oracle數據庫行

[英]single-row subquery returns more than one row Oracle Database

我有兩張桌子,即PESANMASUK和KONTAK。 在PESANMASUK我有5個文件: IDMASUK,TANGGALMASUK,JAM,NOMERHP,ISIPESAN 和KONTAK我有3個文件: IDKONTAK,NAMA,NOHP

PESANMASUK表數據:

IDMASUK TANGGALMASUK    JAM     NOMERHP     ISIPESAN
1       09/08/2015      09:00   +62847776   try sms
2       08/08/2015      10:00   +62856790   plase come in
3       08/08/2015      06:00   +6283444    you and me

KONTAK表數據:

IDKONTAK    NAMA        NOHP
1           RIAN        +62847776
2           ALFIAN      +62856790

這個結果是我想要的:

IDMASUK TANGGALMASUK    JAM     NOMERHP     NAMA        ISIPESAN
1       09/08/2015      09:00   +62847776   RIAN        try sms
2       08/08/2015      10:00   +62856790   ALFIAN      plase come in
3       08/08/2015      06:00   +6283444                you and me

這是我的oracle查詢:

SELECT IDMASUK, TANGGALMASUK, JAM, NOMERHP, ISIPESAN, 
(SELECT NAMA FROM KONTAK WHERE NOHP IN (SELECT NOMERHP FROM PESANMASUK)) AS NAMA 
FROM PESANMASUK

我得到這樣的錯誤:

ORA-01427: single-row subquery returns more than one row

我想在PESANMASUK的NOMERHP和KONTAK的NAMA之間進行匹配並返回所有行。

我該怎么解決這個問題?

試一試。:)

左連接獲取左表上的詳細信息或行,即使它在右表上沒有匹配的數據。

請瀏覽以下鏈接,了解有關左連接的更多信息。 http://www.w3schools.com/sql/sql_join_left.asp

select idmasuk, tanggalmasuk, jam, nomerhp, nama, isipesan
from 
pesanmasuk
left join kontak
on pesanmasuk.nomerhp = kontak.nohp;

希望能幫助到你。 干杯! :)

如錯誤所示,子查詢返回多行。 以下是兩種修復方法:

SELECT IDMASUK, TANGGALMASUK, JAM, NOMERHP, ISIPESAN, 
       (SELECT MAX(NAMA) FROM KONTAK WHERE NOHP IN (SELECT NOMERHP FROM PESANMASUK)) AS NAMA 
FROM PESANMASUK;

要么:

SELECT IDMASUK, TANGGALMASUK, JAM, NOMERHP, ISIPESAN, 
       (SELECT NAMA FROM KONTAK WHERE NOHP IN (SELECT NOMERHP FROM PESANMASUK WHERE ROWNUM = 1)) AS NAMA 
FROM PESANMASUK;

不過,我的猜測是,你想要的並不是你想要的相關子查詢:

SELECT IDMASUK, TANGGALMASUK, JAM, NOMERHP, ISIPESAN, 
       (SELECT k.NAMA FROM KONTAK k WHERE k.NOHP = p.NOMERHP) AS NAMA 
FROM PESANMASUK p

編輯:

要獲取所有名稱,可以使用listagg()

SELECT IDMASUK, TANGGALMASUK, JAM, NOMERHP, ISIPESAN, 
       (SELECT LISTAGG(k.NAMA, ',') WITHIN GROUP (ORDER BY k.NAMA)
        FROM KONTAK k
        WHERE k.NOHP = p.NOMERHP) AS NAMA 
FROM PESANMASUK p

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM