2017-02-20 8 views
-1

Ich erhalte die folgende Fehlermeldung: „einreihige Unterabfrage gibt mehr als eine Zeile“ beim Versuch, die folgende Abfrage auszuführen:einreihige Unterabfrage gibt mehr als eine Zeile

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

Verwenden IN-Klausel statt Gleichheit prüfen 'ITEM_ID =' –

+1

Würden Sie nicht besser dran, die beiden Tabellen verknüpft und dann Filterung? – Fred

+0

@Fred - nein, das OP wäre ** nicht ** besser dran, die beiden Tabellen zu verbinden; Die von Jaydip vorgeschlagene "IN" -Lösung ist effizienter. Eine IN-Bedingung arbeitet nur so viel, wie benötigt wird, um zu bestimmen, ob eine ID in einer Liste ist oder nicht; Ein tatsächlicher Join macht mehr Arbeit als das. – mathguy

Antwort

2

Änderung dieses:

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

Sie können mehrere Zeilen für einen Operator "=" nicht zurückgeben.

1

Der Fehler ist ziemlich offensichtlich. Verwenden Sie 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') 
        ); 
Verwandte Themen