PDA

View Full Version : سوال: بررسی دو شرط در یک کوئری



رامین مرادی
یک شنبه 24 شهریور 1398, 11:36 صبح
سلام دوستان من دوتا جدول دارم میخوام از این دوتا جدول خروجی بگیرم. مد نظرمم نیست چه تو اس کیو ال انجام بشه چه تو سی شارپ برا همین اینجا تایپیکو گذاشتم. مغزم یه لحظه هنگ کرد شاید خیلی ساده باشه ولی منو گیج کرده این مورد.:لبخند:


جدول اولم شامل (شماره پرونده - نوبت - تاریخ درخواست)

جدول دومم (شماره پرونده - نوبت - تاریخ انجام)

خروجی مد نظرم:

تمامی پرونده هایی با نوبت مشخص موجود در جدول اول که در جدول دوم با همان نوبت وجود ندارد.

ممنون میشم راهنماییم کنید.

danialafshari
یک شنبه 24 شهریور 1398, 12:36 عصر
چرا هر دو رو در یک جدول نمیذارید؟
برای کوئری هم اونایی رو نشون بده که تاریخ انجام برابر مقدار هست/نیست

رامین مرادی
یک شنبه 24 شهریور 1398, 13:32 عصر
چرا هر دو رو در یک جدول نمیذارید؟
برای کوئری هم اونایی رو نشون بده که تاریخ انجام برابر مقدار هست/نیست

ماهیت کار جوریه که باید اول جدول 1 پر بشه . بعدا جدول 2 پر میشه. امکان ادغامش نیست بنا به دلایلی

Mahmoud.Afrad
یک شنبه 24 شهریور 1398, 14:45 عصر
ماهیت کار جوریه که باید اول جدول 1 پر بشه . بعدا جدول 2 پر میشه. امکان ادغامش نیست بنا به دلایلی

میشه بگید چه دلایلی؟

رامین مرادی
یک شنبه 24 شهریور 1398, 16:50 عصر
میشه بگید چه دلایلی؟

چون تا الان در واقعیت جدول 2 پر میشد و بخاطر تغییرات ساختاری و تغییر روند کار ابتدا یک درخواست میاد و ثبت میشه تو جدول اول بعد کاری بابت اون درخواست ثبت میشه تو جدول 2. حالا ما باید ببینیم کدوم درخواستا مونده که باید انجام بشه. اگه یک شرط دخیل بود با یه سلکت تو در تو میشد حل کرد. اما چون همزمان دوتا شرط دخیله اینجاشو موندم چیکار کنم.

Mahmoud.Afrad
یک شنبه 24 شهریور 1398, 17:47 عصر
چون تا الان در واقعیت جدول 2 پر میشد و بخاطر تغییرات ساختاری و تغییر روند کار ابتدا یک درخواست میاد و ثبت میشه تو جدول اول بعد کاری بابت اون درخواست ثبت میشه تو جدول 2. حالا ما باید ببینیم کدوم درخواستا مونده که باید انجام بشه. اگه یک شرط دخیل بود با یه سلکت تو در تو میشد حل کرد. اما چون همزمان دوتا شرط دخیله اینجاشو موندم چیکار کنم.

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

mmbguide
یک شنبه 24 شهریور 1398, 23:15 عصر
بهترن روش همونی هستش که جناب Mahmoud.Afrad (https://barnamenevis.org/member.php?71297-Mahmoud-Afrad) عنوان کرده ولی اگر هم خواستی سازوکار خودت رو داشته باشی میتونی بواسطه Left Join به هدف برسی. در واقع با این نوع Joint تمام ردیف های جدول اول رو میتوی داشته باشی و در جدول دوم اگر چیزی وجود نداشته باشه مقدار Null برگردونده میشه و برای هر دو جدول میتونی شرط های جداگانه ای رو اعمال کنی

رامین مرادی
دوشنبه 25 شهریور 1398, 08:24 صبح
اینی که گفتید در ساده ترین حالت با اضافه کردن یک ستون به همان جدول قدیمی قابل حل هست.

چه ستونی اضافه بشه؟ یعنی تاریخ درخواست بهش اضافه بشه بعد کاربر بار اول فقط تاریخ درخواستو پر بکنه و دفعه بعد بره اطلاعات تکمیلی اونو بزنه؟

رامین مرادی
دوشنبه 25 شهریور 1398, 08:30 صبح
بهترن روش همونی هستش که جناب Mahmoud.Afrad (https://barnamenevis.org/member.php?71297-Mahmoud-Afrad) عنوان کرده ولی اگر هم خواستی سازوکار خودت رو داشته باشی میتونی بواسطه Left Join به هدف برسی. در واقع با این نوع Joint تمام ردیف های جدول اول رو میتوی داشته باشی و در جدول دوم اگر چیزی وجود نداشته باشه مقدار Null برگردونده میشه و برای هر دو جدول میتونی شرط های جداگانه ای رو اعمال کنی

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

mmbguide
دوشنبه 25 شهریور 1398, 10:16 صبح
ببینید در انجام یک طراحی روش های متفاوتی وجود داره. مشابه جدول شما رو من در یک پروژه با 134 ستون دارم که به مرور زمان و در بخش ها مختلفی تکمیل میشه. ولی در Join کردن ستون ها فقط و فقط ستون مورد نظر رو Select میکنم و ...

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

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

Mahmoud.Afrad
دوشنبه 25 شهریور 1398, 17:50 عصر
چه ستونی اضافه بشه؟ یعنی تاریخ درخواست بهش اضافه بشه بعد کاربر بار اول فقط تاریخ درخواستو پر بکنه و دفعه بعد بره اطلاعات تکمیلی اونو بزنه؟

آره دیگه،



البته میشه طوری طراحی را تکمیل کرد که روندها (تاریخ درخواست، تاریخ انجام و مثلا تاریخ بازبینی و ...) در یک جدول باشند و شما در یک جدول دیگر رویداد این روندها رو ثبت کنید. در این حالت باید تغییراتی در طراحی و دیتابیس اعمال کنید.


پی نوشت:
قبل از هر کاری بکاپ کامل از دیتابیس تهیه کنید.

رامین مرادی
پنج شنبه 28 شهریور 1398, 08:06 صبح
آره دیگه،



البته میشه طوری طراحی را تکمیل کرد که روندها (تاریخ درخواست، تاریخ انجام و مثلا تاریخ بازبینی و ...) در یک جدول باشند و شما در یک جدول دیگر رویداد این روندها رو ثبت کنید. در این حالت باید تغییراتی در طراحی و دیتابیس اعمال کنید.


پی نوشت:
قبل از هر کاری بکاپ کامل از دیتابیس تهیه کنید.

من دو جدول رو با هم ادغام کردم حالا رله حل سری برا انتقال اطلاعات جدول 2 به 1 چیه؟ آی دی جدول 1 به عنوان کلید خارجی جدول 2 هستش. فقط اطلاعات خیلی زیاده و نمیشه دونه دونه منتقل کرد.

رامین مرادی
پنج شنبه 28 شهریور 1398, 10:08 صبح
این روش رو تونستم به کار ببرم میزارم اینجا بقیه دوستان هم خواستن استفاده کنن



MERGE [Table_1] t1
USING [Table_2] t2
ON t1.id = t2.t1id
WHEN MATCHED THEN
UPDATE
SET t1.address = t2.address;



فک کنم واضحه اگه بیشتر خواستید بدونید توضیح بدم کد رو.