আমি আজকে লিখেছি এমন একটি প্রশ্নের সাথে কাজ করছি যেটির 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 C
A এবং 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 শর্তগুলির মধ্যে যদি সত্য হয় তবে এটি বাকী মূল্যায়ন শর্ট সার্কিট করতে সক্ষম হবে।