2012-09-17 5 views
8

Celem mojego zapytania jest zwrócenie nazwy kraju i jego głowy państwa, jeśli jego headofstate ma nazwę zaczynającą się od A, a stolica kraju ma więcej niż 100 000 osób korzystających z zagnieżdżonego zapytania.Zapytania dotyczące zagnieżdżania w SQL

Oto moje zapytanie:

SELECT country.name as country, 
     (SELECT country.headofstate 
     from country 
     where country.headofstate like 'A%')  
from country, city 
where city.population > 100000; 

Próbowałem odwrócenie go, umieszczając go w klauzuli WHERE itp Nie rozumiem zagnieżdżonych zapytań. Właśnie dostaję błędy z powrotem, jak "podzapytanie zwraca więcej niż jeden wiersz" i takie. Jeśli ktoś mógłby mi pomóc, jak go zamówić i wyjaśnić, dlaczego musi to być określony sposób, byłoby wspaniale.

Odpowiedz

15

Jeśli to ma być „zagnieżdżone”, to byłby jeden sposób, aby uzyskać zadanie:

SELECT o.name AS country, o.headofstate 
FROM country o 
WHERE o.headofstate like 'A%' 
AND (
    SELECT i.population 
    FROM city i 
    WHERE i.id = o.capital 
    ) > 100000 

A byłoby jednak wydajniejsze niż skorelowane podkwerendy. Czy to możliwe, że ten, kto kiedykolwiek dał ci to zadanie, nie jest w stanie się rozpędzić?

+0

Jeśli korzystam z tego rodzaju zapytania Query, to pokazuje mi błąd jak poniżej . Operand powinien zawierać 1 kolumnę (-y) może mi pomóc .... Mój zapytań SQL SELECT s. * OD j5749_faculty_subjects jako S GDZIE s.subjectid = '1' oraz ( \t \t wybrać. * \t \t OD j5749_facultyavailablity jako \t \t GDZIE a.facultyid = s.facultyid I a.timeid = '3' ) – Amit

+0

@amit: patrz ostatnia część w moim zapytaniu: '> 100000'. Nie masz odpowiednika. Prawdopodobnie chcesz "EXISTS". [Zobacz ten przykład.] (Http://stackoverflow.com/questions/14251180/find-records-where-join-doesnt-exist/14260510#14260510) Inaczej, zacznij * nowe pytanie * ze wszystkimi szczegółami. –

7

Trzeba join dwie tabele, a następnie filtrować wynik w where klauzuli:

SELECT country.name as country, country.headofstate 
from country 
inner join city on city.id = country.capital 
where city.population > 100000 
and country.headofstate like 'A%' 
+0

Dzięki za pomoc ponownie! I choć działa to doskonale i ma sens, mam używać zapytań zagnieżdżonych. Czy masz alternatywę? – ZAX

+1

@ZAX, jeśli potrzebujesz zagnieżdżonego zapytania, spójrz na moją odpowiedź ... :-) – aleroot

+2

@ZAX Dare Pytam, dlaczego, na Ziemi, jesteś ** suppposed **, aby użyć zapytań zagnieżdżonych? Czy to zadanie domowe? Ponieważ kwerendy zagnieżdżone nie są nawet najlepszym rozwiązaniem dla tego problemu –

0

Sposób, w jaki to widzę, jest jedynym miejscem dla zapytania zagnieżdżonego, które znajduje się w klauzuli WHERE, np.

SELECT country.name, country.headofstate 
FROM country 
WHERE country.headofstate LIKE 'A%' AND 
country.id in (SELECT country_id FROM city WHERE population > 100000) 

Poza tym, muszę zgodzić się z Adrianem: dlaczego do cholery powinieneś użyć zapytań zagnieżdżonych?

1

Poniższe zapytanie powinno pomóc Ci osiągnąć to, czego chcesz.

select scountry, headofstate from data 
where data.scountry like 'a%'and ttlppl>=100000