PDA

View Full Version : سوال: لیست کردن تمام کسانی که حتما این دو قلم جنس را تحویل گرفته اند.



mhsmity
سه شنبه 19 فروردین 1393, 23:41 عصر
سلام

SELECT tblEqpGet.idmain, tblEqpGet.x1, tblEqp.name
FROM tblEqpGet INNER JOIN
tblEqp ON tblEqpGet.ideqp = tblEqp.id
WHERE (tblEqp.name LIKE N'عینک آفتابی') AND (tblEqp.name LIKE N'عصا')

میی خوام تمام کسانی که این دو قلم جنس را تحویل گرفتن لیست بشن
ولی کدها به درستی کار نمی کنه
؟

مهرداد صفا
چهارشنبه 20 فروردین 1393, 07:51 صبح
سلام دوست من.
به جای AND از OR استفاده کنید.


دوستان لطفا این قبیل سوالات که صرفا در مورد T-SQL بوده و ربطی به C# ندارد را در تالار T-SQL مطرح کنید.

Davidd
چهارشنبه 20 فروردین 1393, 08:29 صبح
كد كار نمي كنه چون توي كوئري كه نوشتين فيلد نام همزمان بايد هم 'عینک آفتابی' باشه و هم 'عصا' كه چنين ركوردي وجود نداره



به جای AND از OR استفاده کنید.
.
با استفاده از OR ليست افرادي مياد كه يكي از اين دو قلم جنس يا هر دو را با هم گرفتن كه درست نيست.
فكر كنم شما بايد عملگر تقسيم كه توي جبر رابطه اي داريم با SQL بنويسي (عملگر تقسيم براي كوئري هايي كه شامل "همه" مي شوند مثلا كساني كه همه اين دروس را انتخاب كرده اند). سرچ كني هست.

mhsmity
چهارشنبه 20 فروردین 1393, 09:44 صبح
كد كار نمي كنه چون توي كوئري كه نوشتين فيلد نام همزمان بايد هم 'عینک آفتابی' باشه و هم 'عصا' كه چنين ركوردي وجود نداره


با استفاده از OR ليست افرادي مياد كه يكي از اين دو قلم جنس يا هر دو را با هم گرفتن كه درست نيست.
فكر كنم شما بايد عملگر تقسيم كه توي جبر رابطه اي داريم با SQL بنويسي (عملگر تقسيم براي كوئري هايي كه شامل "همه" مي شوند مثلا كساني كه همه اين دروس را انتخاب كرده اند). سرچ كني هست.

ای کاش یکم بیشتر توضیح می دادین میشه چندتا مثال از همین "(عملگر تقسيم براي كوئري هايي كه شامل "همه" مي شوند" می زاشتین
اصلا متوجه نشدم که باید چی رو سرچ کنم.

mhsmity
چهارشنبه 20 فروردین 1393, 09:54 صبح
سلام دوست من.
به جای AND از OR استفاده کنید.


دوستان لطفا این قبیل سوالات که صرفا در مورد T-SQL بوده و ربطی به C#‎ ندارد را در تالار T-SQL مطرح کنید.

سلام نه or کار من رو اصلا راه نمیدازه
اگه سوال رو یک بار دیگه بخونین متوجه میشن
تمام کسانی که این دو قلم جنس رو دارند فقط و فقط یک بار نمایشون بده

بابت تذکر شما هم ممنون چشم
ولی همه دوستان من تو این بخش هستند و فعالیت دارند گفتم اینجا بپرسم تا زود در به جواب برسم

Davidd
چهارشنبه 20 فروردین 1393, 10:10 صبح
سرچ كنيد relational algebra divide in sql

يه نمونه :

Division:

Find items in one set that are related to all of the items in another set. In a many-to-many relationship there are three tables, A, B, C with C as the table representing the many-to-many key pairs of A and B.
For simple division: What are the 'A_KEY's to which all 'B_KEY's belong?



select distinct A_KEY
from TABLE_C C
where not exists (
select B_KEY
from TABLE_B B
where not exists (
select *
from TABLE_C CC
where A.A_KEY = CC.A_KEY
and B.B_KEY = CC.B_KEY ))

مهرداد صفا
چهارشنبه 20 فروردین 1393, 12:31 عصر
سلام نه or کار من رو اصلا راه نمیدازه
اگه سوال رو یک بار دیگه بخونین متوجه میشن
تمام کسانی که این دو قلم جنس رو دارند فقط و فقط یک بار نمایشون بده

بابت تذکر شما هم ممنون چشم
ولی همه دوستان من تو این بخش هستند و فعالیت دارند گفتم اینجا بپرسم تا زود در به جواب برسم


می تونید از or استفاده کنید و با استفاده از Count رکوردهایی رو انتخاب کنید که شامل هر دو شرط هستند:

select b.MainID,b.X1 from TblEqpGet b
join TblEqp a on b.Get_ID=a.ID where
a.name like N'عینک' or a.name like N'عصا' group by b.MainID,b.x1 having count(B.MainID) =2

و یا شبیه به این:

select b.MainID,B.X1
from TblEqpGet b join TblEqp a
on b.Get_ID = A.ID
where (select count(b2.MainID) from TblEqpGet b2 where b2.MainID=b.MainID and (a.Name LIKE N'عینک' or a.name like N'عصا')) =2


علاوه بر اینکه شما متعهد به اجرای قوانین انجمن هستید در تالار مربوطه زودتر و بهتر به جواب می رسید.
تشکر از اینکه برای حفظ نظم تالار اهمیت قاعلید.

mhsmity
پنج شنبه 21 فروردین 1393, 07:26 صبح
می تونید از or استفاده کنید و با استفاده از Count رکوردهایی رو انتخاب کنید که شامل هر دو شرط هستند:

select b.MainID,b.X1 from TblEqpGet b
join TblEqp a on b.Get_ID=a.ID where
a.name like N'عینک' or a.name like N'عصا' group by b.MainID,b.x1 having count(B.MainID) =2

و یا شبیه به این:

select b.MainID,B.X1
from TblEqpGet b join TblEqp a
on b.Get_ID = A.ID
where (select count(b2.MainID) from TblEqpGet b2 where b2.MainID=b.MainID and (a.Name LIKE N'عینک' or a.name like N'عصا')) =2


علاوه بر اینکه شما متعهد به اجرای قوانین انجمن هستید در تالار مربوطه زودتر و بهتر به جواب می رسید.
تشکر از اینکه برای حفظ نظم تالار اهمیت قاعلید.

سلام ممنون بخشید.
ای به چشم قوانین رو رعایت می کنیم.
ولی خدایش اون بخش درش تخته هست هیچ گناهی ندارم.

دستورات بالا که کار نکرد .
ما نمی توانیم هیچ فیلد اضافه ای از تجهیزات داشته باشیم به غیر از این که دارای نام یکی و تاریخ دریافت و .... مساوی داشته باشیم. به ازای هر سطر که این اصلا امکان ندارد.
چون عصا تاریخ تحویلش حتما با عینک آفتای فرق داره نمیشه که نام تجهیزات،تاریخ تحویل و ..... را دریک سطر داشته باشیم.
پس باید نام تجیزات، تاریخ تحویل و ..... رو حذف کرده.

من به این کدها رسیدیم

SELECT tblEqpGet.idmain
FROM tblEqpGet INNER JOIN
tblEqp ON tblEqpGet.ideqp = tblEqp.id
WHERE (tblEqp.name LIKE N'عینک آفتابی')
INTERSECT
SELECT tblEqpGet.idmain
FROM tblEqpGet INNER JOIN
tblEqp ON tblEqpGet.ideqp = tblEqp.id
WHERE (tblEqp.name LIKE N'عصا')

مهرداد صفا
جمعه 22 فروردین 1393, 13:53 عصر
سلام ممنون بخشید.
ای به چشم قوانین رو رعایت می کنیم.
ولی خدایش اون بخش درش تخته هست هیچ گناهی ندارم.



دستورات بالا که کار نکرد .


اگر فیلد x1 رو حذف کنید جواب می گیرید. به این صورت امتحان کنید:

select b.MainID from TblEqpGet b
join TblEqp a on b.Get_ID=a.ID where
a.name like N'عینک' or a.name like N'عصا' group by b.MainID having count(B.MainID) =2




البته باز هم به شرطی که یک نفر دوبار یک جنس رو دریافت نکرده باشه.


ما نمی توانیم هیچ فیلد اضافه ای از تجهیزات داشته باشیم به غیر از این که دارای نام یکی و تاریخ دریافت و .... مساوی داشته باشیم. به ازای هر سطر که این اصلا امکان ندارد.
چون عصا تاریخ تحویلش حتما با عینک آفتای فرق داره نمیشه که نام تجهیزات،تاریخ تحویل و ..... را دریک سطر داشته باشیم.
پس باید نام تجیزات، تاریخ تحویل و ..... رو حذف کرده.

راه که زیاد هست!! شما بفرمایید: آیا همیشه تعداد فیلدهایی که کوئری می گیرید دو عدد هست؟

mhsmity
جمعه 22 فروردین 1393, 14:35 عصر
[QUOTE=مهرداد صفا
راه که زیاد هست!! شما بفرمایید: آیا همیشه تعداد فیلدهایی که کوئری می گیرید دو عدد هست؟[/QUOTE]

سلام فعلا هرکس که مثلا این دو قلم جنس رو تحویل گرفته .

ولی در آینده شاید 3 عدد و 4 عدد هم بخوام به نرم افزارم اضافه کنم که بتونه لیستش رو تهیه کند.

اگر بخوایم بقیه فیلدها رو داشته باشیم باید and رو به or تبدیل کنیم و در لیست نام های تکراری داشته باشیم. که این مد نظر من نیست
همون طور که می بیند مشکل رو فعلا حل کردم.

Mahmoud.Afrad
جمعه 22 فروردین 1393, 14:42 عصر
فکر نمیکنم گروهبندی اینجا مفید باشه. حالتی رو فرض کنید که یک شخص دو بار یا بیشتر «عینک» خریده باشه. در این حالت این شخص انتخاب میشه در صورتی که «عصا» نخریده. بهترین روش همون اشتراک گرفتن هست.