আমি আজকে লিখেছি এমন একটি প্রশ্নের সাথে কাজ করছি যেটির WHEREমতো কিছু ব্যবহার না করে একটি আইএন (স্টাফের তালিকা) ফিল্টার ব্যবহারের জন্য ধারাটি থেকে কোডটি পরিবর্তন করতে হয়েছিল had
item_desc = 'item 1'
OR item_desc = 'item 2'
OR item_desc = 'item 3'
OR item_desc = 'item 4'
উপরেরটি 15 মিনিটের জন্য দৌড়েছিল এবং কিছুই ফেরেনি, তবুও নিম্নলিখিতগুলি আমার ফলাফলটি 1.5 মিনিটের মধ্যে দিয়েছিল
item_desc IN (
'item 1'
,'item 2'
,'item 3'
,'item 4'
)
আমি এসকিউএল-এ এটি করেছি এবং অবাক হয়েছি কেন আইআর (আইটেমের তালিকা) তারপরে ওয়ান স্টেটমেন্টের পরে এত দ্রুত সঞ্চালিত হয়েছিল।
- সম্পাদনা - এসকিউএল সার্ভার ২০০৮, আমি এই বিটটিকে প্রথম স্থানে না রাখার জন্য ক্ষমা চাইছি।
ORবিবৃতিগুলি ব্যবহার করে এখানে সম্পূর্ণরূপে ক্যোয়ারী রয়েছে :
DECLARE @SD DATETIME
DECLARE @ED DATETIME
SET @SD = '2013-06-01';
SET @ED = '2013-06-15';
-- COLUMN SELECTION
SELECT PV.PtNo_Num AS 'VISIT ID'
, PV.Med_Rec_No AS 'MRN'
, PV.vst_start_dtime AS 'ADMIT'
, PV.vst_end_dtime AS 'DISC'
, PV.Days_Stay AS 'LOS'
, PV.pt_type AS 'PT TYPE'
, PV.hosp_svc AS 'HOSP SVC'
, SO.ord_no AS 'ORDER NUMBER'
--, SO.ent_dtime AS 'ORDER ENTRY TIME'
--, DATEDIFF(HOUR,PV.vst_start_dtime,SO.ent_dtime) AS 'ADM TO ENTRY HOURS'
, SO.svc_desc AS 'ORDER DESCRIPTION'
, OSM.ord_sts AS 'ORDER STATUS'
, SOS.prcs_dtime AS 'ORDER STATUS TIME'
, DATEDIFF(DAY,PV.vst_start_dtime,SOS.prcs_dtime) AS 'ADM TO ORD STS IN DAYS'
-- DB(S) USED
FROM smsdss.BMH_PLM_PtAcct_V PV
JOIN smsmir.sr_ord SO
ON PV.PtNo_Num = SO.episode_no
JOIN smsmir.sr_ord_sts_hist SOS
ON SO.ord_no = SOS.ord_no
JOIN smsmir.ord_sts_modf_mstr OSM
ON SOS.hist_sts = OSM.ord_sts_modf_cd
-- FILTER(S)
WHERE PV.Adm_Date BETWEEN @SD AND @ED
AND SO.svc_cd = 'PCO_REMFOLEY'
OR SO.svc_cd = 'PCO_INSRTFOLEY'
OR SO.svc_cd = 'PCO_INSTFOLEY'
OR SO.svc_cd = 'PCO_URIMETER'
AND SO.ord_no NOT IN (
SELECT SO.ord_no
FRROM smsdss.BMH_PLM_PtAcct_V PV
JOIN smsmir.sr_ord SO
ON PV.PtNo_Num = SO.episode_no
JOIN smsmir.sr_ord_sts_hist SOS
ON SO.ord_no = SOS.ord_no
JOIN smsmir.ord_sts_modf_mstr OSM
ON SOS.hist_sts = OSM.ord_sts_modf_cd
WHERE OSM.ord_sts = 'DISCONTINUE'
AND SO.svc_cd = 'PCO_REMFOLEY'
OR SO.svc_cd = 'PCO_INSRTFOLEY'
OR SO.svc_cd = 'PCO_INSTFOLEY'
OR SO.svc_cd = 'PCO_URIMETER'
)
ORDER BY PV.PtNo_Num, SO.ord_no, SOS.prcs_dtime
ধন্যবাদ,
ORউপরের প্রকৃত ক্যোয়ারিতে আপনি যেমন করেন তেমন ব্যবহার করার সময় আপনি ইঞ্জিনকে শর্ট সার্কিটের অনুমতি দিন। WHERE A AND B OR CA এবং B মিথ্যা হলেও সি-কে সত্য বলে মূল্যায়ন করবে। আপনি যদি WHERE A and B OR C OR D OR E OR Fউপরে বলেন যে আপনি বলেন , তবে AND এটি ফ্যাক্টর আউট করা যেতে পারে। প্রকৃত সমতুল্য যুক্তিবিজ্ঞান encapsulate হবে ORপ্রথম বন্ধনী উপরে সিরিজ তাই তারা একটি সেট হিসাবে গণ্য করা হয়: WHERE A AND (B OR C OR D OR E)। এইভাবে INএকজনকে চিকিত্সা করা হয়।
ANDআগে পরিচালিত হয় OR, সুতরাং উপরের আপনার জিজ্ঞাসার সমতুল্য WHERE (OSM.ord_sts = 'DISCONTINUE' AND SO.svc_cd = 'PCO_REMFOLEY') OR SO.svc_cd = 'PCO_INSRTFOLEY' OR SO.svc_cd = 'PCO_INSTFOLEY' OR SO.svc_cd = 'PCO_URIMETER'যার অর্থ শেষ 3 শর্তগুলির মধ্যে যদি সত্য হয় তবে এটি বাকী মূল্যায়ন শর্ট সার্কিট করতে সক্ষম হবে।