2011-07-20 23 views
7

Mam tabelę Studies, w której wykonuję polecenie SELECT.Podzakładanie wielu wierszy SQL

Następnie muszę wykonać dalsze SELECT na zwróconym zestawie rekordów. Próbowałem to (uproszczone dla jasności):

SELECT * FROM Studies 
WHERE Id = '2' OR Id = '3' OR Id = '7'; 

SELECT * FROM Studies 
WHERE (Name = 'Test') 
    AND Id IN (SELECT * FROM Studies WHERE Id = '2' OR Id = '3' OR Id = '7'); 

ale wciąż otrzymuję następujący błąd SQL:

Only a single result allowed for a SELECT that is part of an expression


Gdzie jestem będzie niewłaściwy? Jeśli nie jest to oczywiste z mojego kodu - jestem stosunkowo nowy w programowaniu baz danych.

Dzięki

Odpowiedz

13

Nie można zwrócić więcej niż jedną kolumnę w IN (...) podzapytania. Musisz zmienić * (zwróć wszystkie kolumny) na ID. Ale zapytanie nie wymaga podkwerendy, możesz po prostu dodać identyfikator do pierwszego zapytania. Zwykle chcesz uniknąć podkwerend, gdy możesz, ze względu na wydajność.

SELECT * 
FROM Studies 
WHERE Name = 'Test' 
AND ID IN ('2', '3','7') 

Lub jeśli chcesz zachować swoją strukturę:

SELECT * 
FROM Studies 
WHERE (Name = 'Test') 
AND ID IN (SELECT ID FROM Studies WHERE ID = '2' OR ID = '3' OR ID = '7'); 
+0

'Nie może wrócić więcej niż jedną kolumnę w IN (...) subquery'. Dzięki. –

1
SELECT * FROM Studies WHERE (Name = 'Test') AND ID IN (SELECT ID FROM Studies WHERE ID = '2' OR ID = '3' OR ID = '7'); 
Powiązane problemy