2015-08-10 3 views
3

У меня есть две таблицы, а именно PESANMASUK и KONTAK. в PESANMASUK у меня есть 5 заявок: IDMASUK, TANGGALMASUK, JAM, NOMERHP, ISIPESAN. и KONTAK У меня есть 3 формы: IDKONTAK, NAMA, NOHP.однострочный подзапрос возвращает более одной строки База данных Oracle

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 

это мой оракул запрос:

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 

Я хочу соответствия между NOMERHP в PESANMASUK и ДНСР в KONTAK и возвращает все строки.

как я могу это решить ??

+0

Пожалуйста, отредактируйте ваш вопрос с данными образца и желаемыми результатами. –

+0

@GordonLinoff я отредактировал для моего вопроса, .. plase предложите мне, как решить это, .. я пробовал ваш запрос ниже, используя listagg(), но NAMA все еще имеет пустой результат. – aminvincent

ответ

1

Дайте это попробовать. :)

Выравнивание по левому краю получает детали или строки на левой таблицы, даже если она не имеет совпадающие данные по таблице справа.

Пожалуйста, просмотрите приведенную ниже ссылку для получения дополнительной информации о левом соединении. 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; 

Надеется, что это помогает. Ура! :)

+0

да, это работа .... спасибо, ... нет ротации между двумя таблицами, но с помощью левого соединения это работает .... приятно ... – aminvincent

+0

Добро пожаловать. Спасибо, что дал мне знать результат. Рад, что смог помочь. : D – user3462803

0

Как говорится в ошибке, подзапрос возвращает более одной строки. Вот два способа это исправить:

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 

EDIT:

Чтобы получить все названия, вы можете использовать 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 
+0

i хочу сопоставить все значение между двумя таблицами этот результат: [1, 10/08/09, +620522611111, RIAN, TES], [2, 10/08/09, +6283888888, ФИАН, TRY SMS]. rian и fian из таблицы KONTAK, которая была сопоставлена ​​с NOMERHP в таблице PESANMASUK – aminvincent

+0

, последний запрос, который вы предлагаете, я хочу, возвращает все строки в запросе. но он все еще не работает.ошибка такая же. ORA-01427: однострочный подзапрос возвращает более одной строки. – aminvincent

+0

Вы можете добавить 'и rownum = 1' в подзапрос. –

Смежные вопросы