ورود

View Full Version : یک کوئری



maryam_loyalty
سه شنبه 07 آذر 1385, 16:30 عصر
سلام
من یک محیط عملیاتی دارم با جداول زیر :
s(sno, sname ,status, city)
p(pno,pname,color,weight)
sp(sno,pno,qty)
در این محیط میخوام کوئری زیر را جواب بده :
مشخصات تولیدکنندگانی که فقط قطعه آبی رنگ تولید کرده باشند؟؟
من 1 چیز نوشتم اما اونایی که علاوه بر آبی رنگ دیگر هم تولید کردند را میده، ممنون میشم کسی به این سؤال من جواب بده.
با تشکر

SQLPRO
سه شنبه 07 آذر 1385, 22:41 عصر
فکر کنم جواب سوالت رو بتونی به طور کامل و مثال های بیشتری در اینجا بگیری و بعد خودت برای تمرین بیشتر این مسئله رو حل کنی.

یک مقاله از استاد ثباتی عزیز (http://barnamenevis.org/forum/showthread.php?t=51192&highlight=%C7%E3%CA%CD%C7%E4)

mzjahromi
چهارشنبه 08 آذر 1385, 06:57 صبح
من 1 چیز نوشتم اما اونایی که علاوه بر آبی رنگ دیگر هم تولید کردند را میده، ممنون میشم کسی به این سؤال من جواب بده.
این شرط رو به آخر اونی که نوشتی اضافه کن.


and Not Sno in(Select sno from sp , p where p.pno=sp.pno and color <>'blue')

maryam_loyalty
چهارشنبه 08 آذر 1385, 18:38 عصر
سلام ممنونم از توجه دوستان
اما اون مقاله که باز نمی شه و این کوئری را خودم هم زدم اما جواب نمی ده.
راه حل بهتری سراغ ندارید؟؟

AminSobati
چهارشنبه 08 آذر 1385, 20:20 عصر
من هم با لینک مقاله مشکل داشتم ولی ظاهرا مشکل از سایت بوده چون الان باز میشه.
دوست عزیزم اگر Script جدوال مورد نیاز رو همراه سوالتون پست کنین احتمال دریافت یک جواب خوب و دقیق بیشتر میشه. معمولا بینندگان یک تاپیک وقتی نتونن ساختار جداول و ارتباط ها رو در نگاه اول بدست بیارن از خواندن سوال دلسرد میشن...

maryam_loyalty
یک شنبه 12 آذر 1385, 20:57 عصر
سلام
ممنون از توجهتون . من جداول رابراتون می نویسم البته چند تا سوال دیگه هم دارم از همین جداول ممنون می شم جواب بدین .

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_spj_j]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[spj] DROP CONSTRAINT FK_spj_j
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_spj_p]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[spj] DROP CONSTRAINT FK_spj_p
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_spj_s]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[spj] DROP CONSTRAINT FK_spj_s
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[j]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[j]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[p]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[s]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[s]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spj]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[spj]
GO

CREATE TABLE [dbo].[j] (
[jno] [int] IDENTITY (1, 1) NOT NULL ,
[jname] [char] (10) COLLATE Arabic_CI_AS NULL ,
[city] [char] (10) COLLATE Arabic_CI_AS NULL ,
[status] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[p] (
[pno] [int] IDENTITY (1, 1) NOT NULL ,
[pname] [char] (10) COLLATE Arabic_CI_AS NULL ,
[color] [char] (10) COLLATE Arabic_CI_AS NULL ,
[weight] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[s] (
[sno] [int] IDENTITY (1, 1) NOT NULL ,
[sname] [char] (10) COLLATE Arabic_CI_AS NULL ,
[status] [int] NULL ,
[city] [char] (10) COLLATE Arabic_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[spj] (
[sno] [int] NOT NULL ,
[pno] [int] NOT NULL ,
[jno] [int] NOT NULL ,
[qty] [int] NULL
) ON [PRIMARY]
GO



فقط تو این محیط جدول (j) را هم اضافه کردم.
جدول s :‌ جدول تولیدکننده ها است
جدول p : جدول قطعات است.
جدول j : جدول پروژه ها است .
جدول spj : نشان می دهد هر تولید کننده چه تعداد قطعه برای چه پروژه ای تولید کرده است.
در این محیط میخوام کوئری های زیر را جواب بدم :
1- مشخصات تولیدکنندگانی که فقط قطعه آبی رنگ تولید کرده باشند؟؟
2- شماره تولید کنندگانی که را بیابید که برای پروژه ای قطعه p1 را با تعداد بزرگتر از میانگین تعداد تهیه شده از p1 برای همان پروژه تهیه کرده باشند ؟؟
3- نام تهیه کنندگانی که لااقل تمامی قطعات تهیه شده توسط s1 را تولید کرده باشند ؟؟
باتشکر .

maryam_loyalty
دوشنبه 13 آذر 1385, 22:43 عصر
سلام آقای mzjahromi
ممنون از پیامتون . ببخشید من یه چیزی شبیه به این را داشتم و اشتباه بود اما چیزی که شما دادید را دوباره چک کردم و درست بود و خیلی خیلی ممنونم.
با تشکر

SQLPRO
سه شنبه 14 آذر 1385, 01:29 صبح
نمیشد همینجا پاسخ بدهند تا همه فیض ببرند؟؟
اگر میخواست چنین کاری انجام بشه دیگه فروم فایده اش چی بود؟
یا هو به اون قدرتمنی هست دیگه

maryam_loyalty
سه شنبه 14 آذر 1385, 11:54 صبح
سلام
من منظورم همین چیزی بود که اینجا نوشته شده نه چیز دیگه ای!!!

AminSobati
چهارشنبه 15 آذر 1385, 18:56 عصر
لیست شرکتهایی که فقط قطعه آبی رنگ تولید کرده باشند:


select distinct s.sname from s left join
(select p.*,s.sno from p join spj s on p.pno=s.pno
where p.color<>'blue') x
on s.sno=x.sno
join spj on s.sno=spj.sno
where x.sno is null


ای کاش نام جداول رو کمی مرتبط انتخاب میکردید!!

maryam_loyalty
چهارشنبه 15 آذر 1385, 20:19 عصر
سلام آقای ثباتی
ممنون از پاسختون و ببخشید که نام جداول خوب نبود .
با تشکر

maryam_loyalty
چهارشنبه 15 آذر 1385, 20:27 عصر
ضمنا آقای ثباتی من هنوز نتونستم اون مقاله را باز کنم؟؟

AminSobati
چهارشنبه 15 آذر 1385, 21:34 عصر
تعجب میکنم! لینکش اینه، یکبار دیگه امتحان کنید:
http://www.sqlservercentral.com/columnists/asobati/2561.asp

maryam_loyalty
پنج شنبه 16 آذر 1385, 21:54 عصر
سلام
ممنون از پاسختون . بله ایندفعه باز شد ، متشکرم .