单行子查询返回多于一行的数据

本文关键字:于一行 数据 返回 查询 单行 | 更新日期: 2023-09-27 18:07:02

我有两张表分别是PESANMASUK和KONTAK。在PESANMASUK中我有5个字段:IDMASUK, TANGGALMASUK, JAM, NOMERHP, ISIPESAN。我有3个字段:IDKONTAK, NAMA, NOHP

PESANMASUK table Data:

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

康德表数据:

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