PDA

View Full Version : عدم وجود رشته در جدول



elahe_rahmanzadeh
چهارشنبه 30 خرداد 1386, 23:54 عصر
سلام
من در دیتا بیسی که دارم(کتابخانه)می خوام یک (یا چند)لغت رو در 3 جدول (اکثر ستون ها),جستجو کنم و اگر آن لغت(ها)در رکوردی وجود نداشت آن را چاپ کند .من از not like استفاده کردم,بین شرطها and و or گذاشتم, ولی جواب درست نگرفتم ؟!؟ از عملگر except هم استفاده کردم اما syntax error می داد.ممکنه من رو راهنمایی کنید؟!:ناراحت:

supporter
پنج شنبه 31 خرداد 1386, 07:07 صبح
نباید در استفاده از not Like مشکلی پیش بیاد اگه به شکل زیر عمل کردید و جواب نگرفتید ممنون می‌شم کدتون بنوسید.





Use Pubs
SELECT *FROM authors
Where au_fname not like '%m%'



و اگه مقدار مورد نظر به عنوان پارامتر پاس میشه :




SELECT *FROM authors
Where au_fname not like '%' + @fname + '%'

elahe_rahmanzadeh
پنج شنبه 31 خرداد 1386, 14:23 عصر
SELECT distinct [tbl_books].[book_id] as 'کد',[tbl_books].[format] as 'فرمت',[tbl_books].[type] as 'نوع',
[tbl_books].[languag] as 'زبان',[tbl_books].[price] as ' قیمت ',[tbl_books].[capacity] as 'حجم ',
[tbl_books].[ISBN] as ' شابک ', [tbl_books].[edition] as ' ویرایش ', [tbl_books].[pub_year] as ' سال انتشار ',
[tbl_books].[publisher] as ' انتشارات ',[tbl_books].[translator] as ' مترجم ',
[tbl_books].[name_book] as ' عنوان کتاب '
FROM [tbl_auther] INNER JOIN[tbl_book_auther] ON [tbl_auther].[auther_id] = [tbl_book_auther].[auther_id]
INNER JOIN[tbl_books] ON [tbl_book_auther].[book_id] = [tbl_books].[book_id]
WHERE (([tbl_auther].[auther_family] not like N'%asp%') OR ([tbl_books].[name_book] not like N'%asp%')
OR([tbl_auther].[auther_name] not like N'%asp%') OR ([tbl_books].[translator] not like N'%asp%')
OR ([tbl_books].[publisher] not like N'%asp%')OR ([tbl_books].[abstract] not like N'%asp%'))


این دقیقا کدی است که با not like جواب نمی گیرم.البته باید بگم که شرطهایی که در where نوشته شدند از چند جدول هستند.

AminSobati
پنج شنبه 31 خرداد 1386, 15:26 عصر
منظورتون از "جواب درست نگرفتن" دقیقا چیه؟ آیا با اطلاعات انگلیسی هم چک کردین که ببینین مشکل ناشی از جستجوی کلمات فارسی نیست؟ و آیا اینکه عملگرهای Query شما از نظر AND/OR بودن و پرانتزها در تقدم و تاخر مشکلی براتون بوجود نیاورده؟ بین پرانتزهای اصلی نباید AND بشه؟

elahe_rahmanzadeh
پنج شنبه 31 خرداد 1386, 19:40 عصر
یعنی اینکه تمام کتابهایی که در دیتابیس دارم را می آورد.البته درست هم هست چون بین شرط ها or است ,اگر حداقل یکی از فیلد ها مثلا کلمه asp را نداشته باشد,کل شرط 1 شده و کتاب را می آورد و فقط در صورتی که همه ی فیلد های مورد جستجو شامل asp باشند را نمی آورد.وقتی هم که بین شرط ها and می گذارم هیچ کتابی را نمی آورد!!(مشکل ناشی از جستجوی کلمات فارسی نیست چون عملگر like را در فارسی و انگلیسی درست می آورد)نمی دونم مشکل از کجاست!

AminSobati
پنج شنبه 31 خرداد 1386, 21:28 عصر
ببینید، با این شکل که شما همه چیز رو OR کردین، اصلا بودن پرانتزها هم تاثیری نخواهد داشت. در ضمن من منظورم AND کردن بین پرانتزهای اصلی بود، نه برای همه حالتها. یعنی چیزی شبیه به این:


SELECT distinct [tbl_books].[book_id] as 'کد',[tbl_books].[format] as 'فرمت',[tbl_books].[type] as 'نوع',
[tbl_books].[languag] as 'زبان',[tbl_books].[price] as ' قیمت ',[tbl_books].[capacity] as 'حجم ',
[tbl_books].[ISBN] as ' شابک ', [tbl_books].[edition] as ' ویرایش ', [tbl_books].[pub_year] as ' سال انتشار ',
[tbl_books].[publisher] as ' انتشارات ',[tbl_books].[translator] as ' مترجم ',
[tbl_books].[name_book] as ' عنوان کتاب '
FROM [tbl_auther] INNER JOIN[tbl_book_auther] ON [tbl_auther].[auther_id] = [tbl_book_auther].[auther_id]
INNER JOIN[tbl_books] ON [tbl_book_auther].[book_id] = [tbl_books].[book_id]
WHERE (([tbl_auther].[auther_family] not like N'%asp%') OR ([tbl_books].[name_book] not like N'%asp%')
AND([tbl_auther].[auther_name] not like N'%asp%') OR ([tbl_books].[translator] not like N'%asp%')
AND ([tbl_books].[publisher] not like N'%asp%')OR ([tbl_books].[abstract] not like N'%asp%'))

supporter
پنج شنبه 31 خرداد 1386, 21:55 عصر
همون طوری که خودتون هم گفتید:


یعنی اینکه تمام کتابهایی که در دیتابیس دارم را می آورد.البته درست هم هست چون بین شرط ها or است ,اگر حداقل یکی از فیلد ها مثلا کلمه asp را نداشته باشد,کل شرط 1 شده و کتاب را می آورد و فقط در صورتی که همه ی فیلد های مورد جستجو شامل asp باشند را نمی آورد.

اما چیزی که مسلمه اگه بین شرط ها از AND استفاده کنید تنها رکوردهایی رو باید بیاره که هیچیک از فیلدهای

auther_family, name_book, auther_name, translator, publisher, abstract

در اون رکورد شامل ASP نیستند.
مطمئن اید که رکوردی با این ویژگی دارید. اگه جوابتون مثبته میشه رکوردهای مربوط به یکی از رکورهایی که این ویژگی رو دارند (در هر سه جدول ) را مشخص کنید.

elahe_rahmanzadeh
جمعه 01 تیر 1386, 08:43 صبح
آقای صوبتی چرا باید بین بعضی and و بین بعضی or باشد؟؟
آقای supporterمن در دیتا بیسم 5 رکورد دارم که اسم یکی از کتابهای موجود در دیتابیس asp.net 2005 with vb.net است و بقیه کتابها فارسی وارد دیتا بیس شده اند.

supporter
جمعه 01 تیر 1386, 10:09 صبح
ببخشید اگه توضیح واضحات میدم
مشکلتون یه کم عجیبه.
ممکنه توی یکی از سه تا جدولتون رکورد متناظر با کتابهایی که مد نظر شماست وجود نداشته باشه (با Innere Join انتخاب نمی‌شن) و یا مثلا کتابی که مد نظر شماست به رکورد(هایی) از جدول tbl_auther مرتبط شده باشه که دارای ویژگی مدنظر شما نیست(AND شرط‌ها برقرار نیست)