SQL مقارنة مجموعة من المعلومات في عمود
سؤال
ويا كل شيء، وأنا أواجه وقتا صياغة صعبة هذا صحيح وهذا هو السبب ايم تواجه مشكلة في العثور على إجابة على الانترنت، وبالتالي فإن أفضل ما يمكن فعله هو إعطاء مثال على ذلك. لدي قاعدة بيانات الجدول التالي:
ACTORNAME SERIESNAME
------------------------------ ------------
baldwin found
baldwin lost
baldwin rocks
baldwin sienfield
costelo friends
costelo prince
costelo remember
denzel friends
denzel prince
denzel remember
fox found
fox friends
fox prince
lopez found
lopez friends
lopez prince
lopez remember
pitt er
pitt everybody
pitt friends
pitt heroes
pitt rocks
smith friends
smith prince
smith remember
وأود أن استخدام عبارة SELECT التي من شأنها أن انتزاع actornames التي تلعب في كل من نفس السلسلة الذي يلعب سميث في ذلك يجب أن يكون actornames الناتجة:.
وcostelo، دينزل ولوبيز
وأنا لست حتى متأكدا من الكلمة الرئيسية للاستخدام. كنت أبحث في الانضمام القيادة وأيضا حاول الطرح، الأقرب أتمكن من الحصول كانت actornames التي تلعب بالضبط في نفس السلسلة الذي يلعب سميث (في هذه الحالة، لا يتم تضمين لوبيز ومن الخطأ)
وهنا هو تفسير آخر:
suppose Smith acts in movies X and Y.
Suppose also that actor
A acts in movies X, Z
B acts in Y
C acts in X, Y, Z
D acts in X, Y
The answer to the query should be actors C and D.
وبعبارة أخرى، عليك أن تعود تلك الجهات التي مجموعة من الأفلام تحتوي على تلك الممثل سميث.
وتبحث عن دفعة في الاتجاه الصحيح، توميك
المحلول
وعذرا. جوابي الأصلي misunderstodd القصد الخاص. جرب هذا بدلا من ذلك:
select t2.actorname,
count(t2.seriesname)
from mytable t1
join mytable t2
on t1.seriesname=t2.seriesname and t1.actorname='smith' and t2.actorname <> 'smith' group by t2.actorname
having count(t2.seriesname)=(select count(seriesname) from mytable where actorname='smith')
نصائح أخرى
SELECT DISTINCT ActorName
FROM dbo.MyTable
WHERE SeriesName IN (SELECT SeriesName FROM dbo.MyTable WHERE ActorName = 'smith');