الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تجاهل الwhere

بدأه KARIMSOFT في 11 ديسمبر 2011 · 11 رد · 1,805 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة

في بعض الاحيان نريد تجار التصفية وهذا الكود يقوم بهذا علي كل من

select

where

group

having

لا اعرف الشرح جيدا ولكن ساترك الكود يتحدث بما اقصدة

اتمني ان يكون سهل الفهم

--Param with where
declare @Val1 NVARCHAR(10)
declare @Val2 INT

--مثل بارسال قيم خالية
SET @Val1=NULL
SET @Val2=NULL

select * 
from table1
WHERE   
((col1= @Val1) or (@Val1 is null )) and
((Col2= @Val2) or (@Val2 is null )) 

----OR

select * 
from table1
WHERE   
CASE WHEN @Val1 IS NULL THEN null else Cal1 end =@Val1
 and 
CASE WHEN @Val2 IS NULL THEN null else Cal2 end =@Val2        

--مثل اخر بارسال قيم افتراضية
SET @Val1=-1
SET @Val2=-1

select * 
from table1
WHERE   
((col1= @Val1) or (@Val1= -1 )) and
((Col2= @Val2) or (@Val2= -1 )) 
----OR

select * 
from table1
WHERE   
CASE WHEN @Val1=-1 THEN -1 else Cal1 end =@Val1
 and 
CASE WHEN @Val2=-1 THEN -1 else Cal2 end =@Val2        
--------------------------------------
--Param with group + having
 declare @Val1 NVARCHAR(10)

--مثل بارسال قيم خالية
SET @Val1=NULL

select 
	case when @Val1 is NULL then NULL else Col1	end as 'sCal1',
	SUM(case when Cal2=4 then 1 else 0 end) AS 'nCal2'
from table1
group by
	case when @Val1 is NULL then NULL else Col1 end 
having
	case when @Val1 is NULL then NULL else Col1 end =@Val1

وفققكم الله

1 −1
#2

السلام عليكم ......... سلمكم الله

اخي كريم سوفت كعهدنا بك جوزيت خير

مع انني لم اجرب الاستعلام الا انني اشعر انني وجدت ضالتي ولكن لي سؤال

هل القيمة -1 لاي نوع بيانات تعني استرجاع كل ما هو متوفر من البيانات

بمعنى

select * from table

تضاهي

Select * from table where Some_Col = -1

جوزيت

اما للسؤال الثاني وكان الاولى الرد هنالك الا ترى ان مليون واربعمائة سجل في السنة شي يسير على برمجيات قواعد البيانات التي تحسب مع الضخمة منها كالسيكوال؟ لانني استخدم الادو Ado component

مشكلة كبيرة تحويلها الى الاوراكل على الاقل في مستواي البرمجي "ملاحظة : انا استخدم لغة الدلفي 7"

شكر الله لكم وجازى

#3

اخي الحلفاوي هناك اختلاف بين الاستعلامين .

للتوضيح انظر الى الشرط

اقتباس
CASE WHEN @Val1=-1 THEN -1 else Cal1 end =@Val1

اذا كان قيمة @Val1=-1 بجملة CASE سيتم انتاج الشرط @Val1=-1 اي سيكون الشرط -1=-1 بالتالي هذا الشرط سيتحقق دائما

في حالة Val1 لاتساوي -1 سيكون الشرط Cal1 = @Val1 اي سيتم جلب الصفوف التي تحقق هذا الشرط

اقتباس

اما للسؤال الثاني وكان الاولى الرد هنالك الا ترى ان مليون واربعمائة سجل في السنة شي يسير على برمجيات قواعد البيانات التي تحسب مع الضخمة منها كالسيكوال؟ لانني استخدم الادو Ado component

لم افهم سؤالك هنا .

لكن مليون سجل سنويا هو رقم بسيط على قواعد البيانات الضخمة ولا اعرف لم الحديث عن التحويل الى اوراكل .

#4

اذا كنت تقصد هذا الكود

--Param with where
declare @Val1 NVARCHAR(10)
declare @Val2 INT
--مثل اخر بارسال قيم افتراضية
SET @Val1='-1'
SET @Val2=-1

select * 
from table1
WHERE   
((col1= @Val1) or (@Val1= '-1' )) and
((Col2= @Val2) or (@Val2= -1 ))

اقصد به تجاهل الفرز بقيمه افتراضية ويمكن ان تكون اي قيمه يشرط ان يستخدم نفس القيمه من الكود لتجاهل الشرط ولا يكون احد القيم المسخدمه للفرز

1
#5

إن أذنتم لي

 

يمكن وضع أي عبارة منطقية صائبة بين الطرفين.. مثال

 

select * 
from table1
WHERE   
((True)=(True)) Or 
(False= False )) Or
((1)=(1)) Or
((-1)=(-1)) Or
((0)=(0)) Or
((100)>(10)) Or 
(("Blue")=("Blue")) Or
(("Blue")Like("B*")) Or So...

 

لا يلزم حقول بيانات هنا

#6

مرحبا بك اخي القحم  شكرا علي المداخلة

كلامك صحيح ولكن كيف ان اتجاهل فرز حقل في وقت وفي وقت اخر انفذ الفرز

 

عندي سؤال ماذا يعني اسمك القحم لا اقصد الاسائة

#7

القحم جزء من اسمي في الهوية الوطنية.. ويعني الأكبر أو الأسن

 

كانوا عندنا ولا زالوا عند إرادة التفريق بين العم وابن أخيه إذا تشابها في الاسم أن يطلقوا على الأكبر (فلان القحم)

 

أما ما يتعلق بعبارة الاستعلام.. فالوظائف (WHERE, ORDER, AVERAGE, GROUP) فهي توابع اختيارية في عبارة الاستعلام.. وهي تأخذ محدداتها من الغرض نفسه (قد يكون جدول أو مصفوفة أو..) وبالتالي لا علاقة بين محددات التابع WHERE والتابع ORDER.. وقد تكون المحددات ضمن بنية الاستعلام وقد لاتكون.. لكن يجب أن تكون جزء من بنية الغرض نفسه

#8

شكرا اخي وتحياي كريم الي القحم B)

#9

جميل نقاشكم ،، أيضا بامكانك حلها بطريقة حالة القيمة هل هي Null أم لا كالتالي :

Select * From Table1 WHERE(@Val1 Is Null Or Col1=@Col1)

تم تعديل هذه المشاركة بواسطة visual6.0 في 18 أغسطس 2013 في 12:57

#10

كلام اخي visual6.0 صحيح اذا كنا نعمل علي متغيران في نفس الوقت

اكرمك الله

#11
KARIMSOFT كتب:

كلام اخي visual6.0 صحيح اذا كنا نعمل علي متغيران في نفس الوقت

اكرمك الله

الله يكرمك أخي ولكن مالمقصود بعبارة متغيران؟ هل تقصد متغيرات ؟

 

لأن الأمر قد يلتبس على البعض

#12

نعم اقصد اكثر من متغير

مواضيع مشابهة