WHERE 1 বা WHERE 1 = 1 ব্যবহার করবেন?


50

সাধারণত, যদি আমাদের ক্যোয়ারী স্টেটমেন্টগুলিতে শর্তগুলির প্রয়োজন না হয়, আমরা কোনও WHEREধারা ব্যবহার করি না । তবে আমি দেখতে পাচ্ছি যে একটি WHERE 1শর্তটি অনেক জায়গায় ব্যবহৃত হচ্ছে, এমনকি অন্যান্য শর্তগুলি উপস্থিত নেই।

  • কেন এটি করা হয়?
  • মৃত্যুদণ্ড কার্যকর করার সময়টির কি নির্দিষ্ট সুবিধা রয়েছে?
  • এটি অন্যান্য কার্যকারিতা সক্ষম করে?
  • ব্যবহার WHERE 1=1কি এর সাথে মিল রয়েছে?

উত্তর:


42

মূলত এটি কেবল প্রোগ্রামার সুবিধার জন্য যেহেতু আপনি কেবল তার AND...পরে অতিরিক্ত শর্ত যুক্ত করতে পারেন এবং কার্যকর করার সময় এর কোনও প্রভাব নেই।

স্ট্যাকওভারফ্লোতে এই লিঙ্কগুলি দেখুন:

নোট যে WHERE 1অনুরূপ WHERE 1=1; উভয়টির অর্থ WHERE TRUEকিন্তু পূর্বেরটিকে অনেকগুলি ডাটাবেস পরিচালন সিস্টেম সত্যই বুলিয়ান হিসাবে প্রত্যাখ্যান করে।


15

আমার প্রধান ব্যবহার হ'ল অনুসন্ধানগুলির বিকাশের সময় স্টাফ মন্তব্য করা আরও সহজ করে তোলে। আমি ,এর এবং এর সাথে নেতৃত্ব দিই and:

SELECT
     A
--  ,B
    ,C
    ,D
--  ,E
FROM TABLE
WHERE 1=1
--  and B='This'
    and C='That'
--  and D is not null

এছাড়াও প্রোগ্রাম্যমেটিকভাবে শেষ পর্যন্ত জিনিসগুলি মোকাবেলা করা সহজ করে তোলে।

this  = "SELECT * "
this += "FROM TABLE "
this += "WHERE 1=1 "
if user chooses option a then this += "and A is not null "
if user chooses option b then this += "and B is not null "
if user chooses option b then this += "and C is not null "
if user chooses option b then this += "and D is not null "

অন্যথায় আপনাকে প্রথম বিকল্পটি অর্জন করতে হবে ... এবং নীচের প্রতিটি বিকল্পের আগের বিকল্পগুলি চেক করতে হবে। যদি ব্যবহারকারী কেবল পূর্ববর্তী উদাহরণে অপশন ডি পছন্দ করে? আপনাকে নিশ্চিত করতে হবে যে if A, B and C aren't chosenতারপরে WHEREঅন্যটি ব্যবহার করুন and। সঙ্গে =শুরুতে, আপনি শুধু বিবৃতি শেষে কোয়ালিফায়ার চড় পারবেন না।


1
এবং আপনি যে কোডটি লিখেছেন ১৯৮০ এর মতো কোনও ভাষায় অবজেক্ট অরিয়েন্টেশন ছাড়াই, কারণ কেউ যদি কোনও অবজেক্ট ভিত্তিক এসকিএল জেনারেটরের ধারণা নিয়ে আসে?
টমটম

আমি codeএসএসএমএস বা অনুরূপ ক্যোয়ারী সরঞ্জামগুলিতে প্রথম ব্লকের মতোই লিখি । শেষ ব্যবহারকারীদের জন্য রিপোর্টিং সরঞ্জামগুলিতে (যেমন ক্রিস্টাল প্রতিবেদনগুলি) রাখার আগে ডেটা সেটগুলি গবেষণা করা এবং সঠিক ফলাফল পাওয়া। দ্বিতীয় ব্লকটি হ'ল আমি অন্য লোকদের কী করতে দেখেছি, যেহেতু আমার কাজ কাঁচা এসকিএল অ্যাক্সেস সম্পর্কে খুব বেশি হয়নি। আমি অন্য লোকেদের অনুরূপ কোডটি সমস্যায় ফেলেছি এবং যুক্তিটি বুঝতে পারি। (কোডটি ভিবি, সি # এবং পিএইচপিতে ছিল)।
ওয়ার্নারসিডি

10

আমরা কেন এমন করি?

খুব সক্ষম না প্রোগ্রামারদের দ্বারা রচিত ডায়নামিক কোড জেনারেশনটি আমার মনে আসে।

নির্বাচন করুন .... যেখানে তৈরি করুন এবং তারপরে আপনার কিছু থাকতে হবে .... সুতরাং শুধুমাত্র যখন প্রয়োজন তখন WHERE যুক্ত করার পরিবর্তে তারা যখন নেই তখনই তারা একটি সীমাবদ্ধ শর্ত যুক্ত করে। দেখেছি - "বিশেষজ্ঞ" গুলি করার জন্য দায়ী।

বা লোকটি কেবল যেখানে জিনিসগুলি বাধ্যতামূলক;)

অন্য কিছু আমি দেখতে ব্যর্থ।


5

আমি পোস্টগ্রিসএসকিউএল এর জন্য সি ++ / সিতে ব্যবহারকারীর সংজ্ঞায়িত ফাংশনগুলির একটি গুচ্ছ প্রোগ্রামিং করছিলাম যা একটি বড় সংস্থার (10 কে + লোক) অন্য লোকেরা ব্যবহার করেছিল। আমার ফাংশনগুলির একটি al whereচ্ছিক প্যারামিটার রয়েছে: কোনও মান দেওয়া না থাকলে, ধারাটি ব্যবহৃত হত না। এটি স্পষ্টভাবে নথিভুক্ত ছিল। দুর্ভাগ্যক্রমে, কেউ এই বৈশিষ্ট্যটি এবং প্রত্যেককে কেবল where 1=1ক্লজ সরবরাহ করার জন্য ব্যবহার করেননি। তাত্ত্বিকভাবে এটি অযৌক্তিক বলে মনে হয়, কার্যত সমস্ত ক্যোয়ারী অপ্টিমাইজার এই ধরণের বক্তব্যকেই রায় দেয়। এবং 10 কে মানুষকে শিক্ষিত করা কঠিন।


3
কেউ কখনও আপনার ইউডিএফকে কল করেনি WHERE 1=1; DROP TABLE CUSTOMERS?
টুইঙ্কলস

তবুও, আমি যেখানে 1 টি ধারা ব্যবহার করার পিছনে ধারণাগুলি খুঁজে পাচ্ছি না। আরও স্পষ্টতা দরকার? যেহেতু মৃত্যুদণ্ড কার্যকর করার সময় আমি কোনও উন্নতি পাইনি।
এরশিওন

এটি কার্যকর করার সময়টির সাথে সামান্য কিছু করতে পারে। লোকেরা কীভাবে প্রোগ্রাম করে তা সংস্কৃতিতে এটির কাজ রয়েছে। কখনও কখনও এটি ঘটে যে আপনার কোড (আইটি লোক দ্বারা প্রোগ্রাম করা) ইঞ্জিনিয়ারদের দ্বারা ব্যবহৃত হয়। এই ছেলেরা আপনার কোডটি ভাবার এবং তাদের কাছে আবেদন করার নিজস্ব উপায় রয়েছে
আর্থার

@ টিউঙ্কলস: এটি অবশ্যই একটি আকর্ষণীয় বিষয়। এখানে কয়েকটি পয়েন্ট পয়েন্ট নোট করা আছে। (i) ডাটাবেসটি ইউডিএফের জন্য কেবলমাত্র পঠনযোগ্য (ii) আমার ফাংশন কয়েকটি টেবিল গোষ্ঠীতে একসাথে কিছু জিনিস যোগ করে এবং জিনিসগুলি আরও খারাপ ব্যবহার করে ডেটা গুদামজাত করার উইন্ডোটিং ফাংশন তৈরি করে। এটি যেকোন কিছু ফেলে রাখা চ্যালেঞ্জিং করে তোলে যদিও অসম্ভব নয়, (iii) ইউডিএফগুলি প্রাক-উত্পাদন কোডের জন্য বোঝানো হয়েছে। যার অর্থ এটি কখনই উত্পাদনে যায় না: যদি ফাংশনটি চ্যালেঞ্জ থেকে বাঁচে তবে অন্য বিভাগ আমাদের প্রোগ্রাম করা সমস্ত কিছু সম্পূর্ণরূপে লিখে দেয়
আর্থার

4
আসলে 10,000 জন লোককে শিক্ষিত করা বেশ সহজ। অ্যাপ্লিকেশনটি এটির ভুল করলে ব্যর্থ করে দিন। তারা তত্ক্ষণাত এটি অন্যায় করা বন্ধ করবে।
জুঁই

2

"যেখানে 1 = 1" ব্যবহার করা গতিশীল স্কয়ারে কোডের জটিলতা হ্রাস করে যেখানে 'ক্লজ জেনারেশন'। অন্যথায়, 'যেখানে' ধারাটি তৈরি করার সময় আপনার প্রতিটি পরীক্ষার জন্য এটি প্রথম উপাদান যুক্ত কিনা তা পরীক্ষা করা উচিত। কোড জটিলতা হ্রাস এবং কোড জটিলতা হ্রাস করার জন্য এটি একটি সহজ কোড প্যাটার্ন, যেখানে সম্ভব, প্রায় সর্বদা সঠিক সিদ্ধান্ত।


0

আপনি এখানে যান ... প্রোগ্রামিং দৃষ্টিকোণ থেকে 1 = 1 এর এক ব্যবহার ...এখানে চিত্র বর্ণনা লিখুন

এইরকম পরিস্থিতিতে যখন আমার রান সময় সম্পর্কে একটি কোয়েরি তৈরি করা দরকার এবং এটি সংক্ষিপ্ত বা দীর্ঘ হতে পারে, আমি 'যেখানে 1 = 1 এবং' ব্যবহার করি

string criteria =string.Empty;
        if (txtc1.Text != "")
        {
            criteria += "criteria1=" + "'" + txtc1.Text + "' ";
        }
        if (txtc2.Text != "")
        {
            criteria += "OR criteria2=" + "'" + txtc2.Text + "' ";
        }
        if (ddl1.SelectedItem.Text != "")
        {
            criteria += "OR criteria3=" + "'" + ddl1.SelectedItem.Text + "' ";
        } if (ddl2.SelectedItem.Text != "")
        {
            criteria += "OR criteria4=" + "'" + ddl2.SelectedItem.Text + "' ";
        }
        if (ddl3.SelectedItem.Text != "")
        {
            criteria += "OR criteria5=" + "'" + ddl3.SelectedItem.Text + "' ";
        }
        if (ddl4.SelectedItem.Text != "")
        {
            criteria += "OR criteria6=" + "'" + ddl4.SelectedItem.Text + "' ";

        } 
        if (txtc1.Text == "")  
        {
            //criteria = criteria.Substring(2);
            criteria = criteria.Substring(2,criteria.Length-3);
        }
        if (criteria != string.Empty)
        {
            criteria = "where 1=1 AND " + criteria;
            //Response.Write("<script>alert('query constructed by you is : '+'" +criteria+ "');</script>");
            Response.Write(criteria);
        }

জিনিসগুলি সহজ করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.