2015-01-27 29 views
18

Birden çok satır döndüren bir sorgu var ve bu birden çok satırdan değerlerden biri olarak ölçüt ayarlamak istediğim başka bir sorgu var, bu nedenle temel olarak alt soruyu istiyorum böyle bir şey bakmak için:"Subquery 1 satırdan daha fazla döndürür" hatası

select * 
from table 
where id= (multiple row query); 

multiple row query birden çok satır döndürür. Yani bu satırlardan gelen değerler 1,2,3 ise, 1 veya 2 veya 3 olarak ayarlamak istiyorum.

+0

Kullanım Grubu Concat: http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field – Yossi

cevap

53

Alt sorgu yalnızca 1 değerini döndürdüğünde = kullanabilirsiniz.

alt sorgu 1'den fazla değer verdiğinde, kullanmak zorunda kalacak IN:

SELECT * 
FROM Students 
WHERE Marks = (SELECT MAX(Marks) FROM Students) --Subquery returns only 1 value 

SELECT * 
FROM Students 
WHERE Marks IN 
     (SELECT Marks 
     FROM Students 
     ORDER BY Marks DESC 
     LIMIT 10)      --Subquery returns 10 values 
+0

Bu Örneğin, "çoklu satır sorgu" döner emin olun sadece bir sütun. SELECT ID from FOO gibi bir şey çalışacak, SELECT ID, FOO NAME veya SELECT * FOO FROM. –

+0

@SteveSaporta: Haklısın! Daha iyi anlamak için bazı örnekler ekledim. –

6

kullanabilirsiniz in():

select * 
from table 
where id in (multiple row query) 

veya kullanım Örneğin

select * 
from table 
where id IN (multiple row query); 

birleşim:

select distinct t.* 
from source_of_id_table s 
join table t on t.id = s.t_id 
where <conditions for source_of_id_table> 

Katılım, hiçbir zaman performans için daha kötü bir seçim değildir ve kullandığınız veritabanına ve duruma göre daha iyi performans verebilir.

İlgili konular