2017-02-20 3 views
-1

Я получаю следующее сообщение об ошибке: «однорядные подзапрос возвращает более одной строки» при попытке выполнить следующий запрос:однорядные подзапрос возвращает более одной строки

select * 
from wm_inventory 
where item_id =(select item_cbo.item.id 
       from item_cbo 
       where item_name in ('564310','140270')); 
+1

Использование В пункте вместо равенства проверить 'item_id =' –

+1

бы не быть лучше объединения двух таблиц, а затем фильтрации? – Fred

+0

@Fred - нет, OP не будет ** лучше сочетать две таблицы; решение «IN», предложенное Jaydip, более эффективно. Условие 'IN' выполняет только столько работы, сколько необходимо для определения того, является ли идентификатор или нет в списке; фактическое соединение делает больше работы, чем это. – mathguy

ответ

2

Изменение к этому:

select * 
from wm_inventory 
where item_id in (select item_cbo.item.id 
       from item_cbo 
       where item_name in ('564310','140270')); 

Вы не можете вернуть несколько строк для оператора «=».

1

Ошибка довольно очевидна. Используйте in:

select i.* 
from wm_inventory i 
where i.item_id in (select item_cbo.item.id 
        from item_cbo 
        where item_name in ('564310', '140270') 
        ); 
Смежные вопросы