PDA

View Full Version : کوئری فوق پیچیده !



morteza4
جمعه 29 آذر 1392, 23:47 عصر
سلام
در هنگام کار بر روی یک پایگاه داده به یک کوئری نیازمند شده ام که نتونستم جوابشو پیدا کنم
برام معما شده !
اگر از اساتید عزیز بتونن پاسخ رو بدن یعنی دیگه آخر پایگاه داده هستند ! :لبخندساده:
جدول اول من :Movie:
114213
جدول دوم منPerson :
114214
جدول سوم منperson role :
114212
جدول میانی من personMovie :
114211
---------------------------------
من میخواهم یک Select از همه اینها بگیرم با این ویژگی ها:
1.هر فیلم از جدول اول دارای چند شخص (مثلا کارگردان و ..) است که در جدول میانی چهارم آمده است.
2.نقش شخص در جدول سوم که با جدول میانی ارتباط دارد آمده است
3.مشخصات شخص در جدول دوم آمده که با جدول میانی در ارتباط است.
-------------------------------
کوئری مورد نیاز :
میخواهم نام و کد فیلم به همراه نقش و فرد مربوط به آن نقش در هر سطر ار خروجی بیاید
مثلا:
MID,Title,Kargardan,nevisande
----------------------------------
اگر جایی مبهم هست بگید کامل تر کنم
خیلی گیج این شدم ممنون میشم راه حلی اگه بلدید مارو شاگردتون کنید :لبخندساده:

siminhoseini
شنبه 30 آذر 1392, 00:21 صبح
چرا از left join استفاده نمی کنی

morteza4
شنبه 30 آذر 1392, 14:34 عصر
بخشی از جوین ها Left join هست . مشکلی با اون ندارم اما یک مشکل اساسی هست اونم اینکه :
خروجی جدول میانی باید در خروجی اصلی تبدیل بشه. تبدیل سطرها به ستون.. یعنی هر سطر یک اسم داره و یک مقدار که باید تبدیل به ستونی بشه که اسمه بشه نام ستون و مقداره بشه مقدار اون ستونه..

golnaz_a
شنبه 30 آذر 1392, 16:07 عصر
برای این کار باید از Pivot یا CrossTab استفاده کنید اینجا را ببینید http://barnamenevis.org/showthread.php?429621-%DA%A9%D9%85%DA%A9-%D8%AF%D8%B1-%D9%86%D9%88%D8%B4%D8%AA%D9%86-%DB%8C%DA%A9-%DA%A9%D9%88%D8%A6%D8%B1%DB%8C-CrossTab

morteza4
یک شنبه 01 دی 1392, 12:46 عصر
یافتم .. :لبخندساده: راه حل :
SELECT DISTINCT
Movie.Movies2.MID, Movie.Movies2.Title, Movie.Topic.Name AS topicName, Movie.Type.Name AS typeName, Movie.Movies2.Year, Country.Country_Name,
Movie.Movies2.Language,(SELECT (Movie.Person2.FirstName+Movie.Person2.LastName) as name
FROM Movie.Person2 INNER JOIN
Movie.PersonMovie ON Movie.Person2.PID = Movie.PersonMovie.PersonID
WHERE (Movie.PersonMovie.MovieID = Movie.Movies2.MID) AND (Movie.PersonMovie.RoleID = 1)) as Director,(SELECT (Movie.Person2.FirstName+Movie.Person2.LastName) as name
FROM Movie.Person2 INNER JOIN
Movie.PersonMovie ON Movie.Person2.PID = Movie.PersonMovie.PersonID
WHERE (Movie.PersonMovie.MovieID = Movie.Movies2.MID) AND (Movie.PersonMovie.RoleID = 2)) as Writer,(SELECT (Movie.Person2.FirstName+Movie.Person2.LastName) as name
FROM Movie.Person2 INNER JOIN
Movie.PersonMovie ON Movie.Person2.PID = Movie.PersonMovie.PersonID
WHERE (Movie.PersonMovie.MovieID = Movie.Movies2.MID) AND (Movie.PersonMovie.RoleID = 3)) as supplier

FROM Movie.Movies2 LEFT OUTER JOIN
Country ON Movie.Movies2.ProductCountryID = Country.Country_ID LEFT OUTER JOIN
Movie.Topic ON Movie.Movies2.TopicID = Movie.Topic.TopicID LEFT OUTER JOIN
Movie.Type ON Movie.Movies2.TypeID = Movie.Type.TypeID LEFT OUTER JOIN
Movie.PersonMovie ON Movie.Movies2.MID = Movie.PersonMovie.MovieID LEFT OUTER JOIN
Movie.Person2 ON Movie.PersonMovie.PersonID = Movie.Person2.PID