单行子查询返回多于一行的数据
本文关键字:于一行 数据 返回 查询 单行 | 更新日期: 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