2013-06-07 4 views
2

Этот запрос возвращает сбор данных. но мне нужен только список клиентов.Ошибка однострочного подзапроса возвращает более одной строки

select * from customer where cust_acnt_nbr = (select cust_acnt_nbr from Asset where dstrct_id = (select dstrct_id from dstrct where dstrct_nm = 'ATLANTA'))

, пожалуйста, помогите мне, чтобы получить список клиентов

ответ

3

Использование in вместо = если подзапрос может возвращать несколько строк:

select * from customer where cust_acnt_nbr IN 
    (select cust_acnt_nbr from Asset where dstrct_id IN 
     (select dstrct_id from dstrct where dstrct_nm = 'ATLANTA')) 
+0

если я конвертирую его в HQL, это правильно? 'от клиента, где cust_acnt_nbr в (выберите cust_acnt_nbr из Asset, где dstrct_id in (выберите dstrct_id из dstrct, где dstrct_nm = 'ATLANTA'))' –

1

Я стараюсь избегать подзапросов, поскольку они могут иметь бедные производительности и неясно, чего вы пытаетесь достичь. Обычно вы можете преобразовать его в ряд простых объединений, которые легче читать.

select c.* 
from customer c 
inner join Asset a on c.cust_acnt_nbr = a.cust_acnt_nbr 
inner join dstrct d on d.dstrct_id =a.dstrct_id 
where dstrct_nm = 'ATLANTA'