SQL क्रिएट टेबल सिंटैक्स पर "जहाँ 1 = 2" का उपयोग क्यों करें?


82
CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=2;

मैंने इस कथन को इंटरनेट पर कहीं पढ़ा है लेकिन मैं समझ नहीं पाया WHERE 1=2

क्या कोई कृपया, इसे समझाएगा?


4
tl; dr 1 = 2 का मूल्यांकन सभी पंक्तियों के लिए FALSE के रूप में किया जाता है
डेनिस जहरुद्दीन

28
संपूर्ण स्तंभ संरचना को फिर से टाइप करने से बचने के लिए यह थोड़ा हैक है। यह समान कॉलम नाम और डेटा प्रकारों के साथ एक तालिका बनाएगा, लेकिन किसी भी डेटा पंक्तियों या कुंजियों की प्रतिलिपि बनाए बिना।
अद्वैतथ

जब "1 = 2" टाइप किया जाता है तो 2 (दो) चार को बचाएं: 3 char, "False": 5 char
Archemar

1
कृपया ध्यान दें कि यह किसी भी तरह से मानक SQL नहीं है। यह MySQL में काम करता है, अन्य बोलियों के बारे में निश्चित नहीं है।
अल्वारो गोंजालेज

जवाबों:


110

इस प्रकार की कमांड का उपयोग आमतौर पर एक टेबल की संरचना को दूसरे में कॉपी करने के लिए किया जाता है। इस मामले में, कुंजी या बाधाओं को छोड़कर , EMPL_DEMOसमान स्तंभ संरचना होगी ।employees

1=2हमेशा के लिए मूल्यांकन करता है Falseजो आप पंक्तियों में से किसी को कॉपी करने से रोकता है।


2
@ jpmc26 मुझे लगता है कि "समान" एक खराब विकल्प था। मैं सिर्फ कॉलम संरचना की बात कर रहा था।
DrZoo

यह किसी भी सूचकांक या बाधाओं को भी प्रभावित करेगा। अनिवार्य रूप से आप उपयुक्त डेटा प्रकारों के साथ स्तंभों की एक प्रति
बनाएंगे

7
यदि आप सभी बाधाओं, अनुक्रमित, आदि को भी कॉपी करना चाहते हैं, तो आप उपयोग करेंगेCREATE TABLE new_table LIKE old_table
Barmar

1
@ बरमार जब तक यह कुछ नया LIKE old_tableनहीं होता , तब तक यह SQL सर्वर निर्माण नहीं होता ...
WernerCD

1
मुझे लगता है कि स्तंभ संरचना का आपका अर्थ सिर्फ nameऔर typeस्तंभ का है, विचार करें कि स्तंभ संरचना के रूप में कुछ अन्य गुण भी हैं - जैसे डिफ़ॉल्ट मान, उपनाम और आदि;)।
shA.t

27

CREATE TABLE (एक नई तालिका बनाएं)

EMPL_DEMO (EMPL_DEMO कहा जाता है)

AS (डेटा और संरचना के साथ)

SELECT * FROM employees WHERE 1=2; (कर्मचारियों में सब कुछ जहां 1 = 2 है। चूंकि 1 कभी 2 नहीं होता है - संरचना और सभी 0 मिलान पंक्तियों की नकल करें)

.. संभावित रूप से संरचना की प्रतिलिपि बनाएँ और डेटा नहीं।


14

यह सिंटैक्स समान है, लेकिन यह अधिक स्पष्ट है, यह समान संरचना के साथ एक तालिका बनाता है, जिसमें कोई डेटा नहीं है।

CREATE TABLE EMPL_DEMO AS SELECT * FROM employees limit 0;

2
LIMIT की कुछ लोकप्रियता है, लेकिन यह कहीं भी एक मानक के करीब नहीं है (दुर्भाग्य से)
bgusach

1
@bgusach, jeeze, इतना पागल है। मैं सोच भी नहीं सकता था कि कोई भी वास्तविक डीबी संभवतः नहीं हो सकता है LIMIT। लेकिन ऐसा लगता है कि MSSQL की कमी है (जो मुझे MSSQL का उपयोग नहीं करने के लिए एक अच्छे कारण के रूप में हमला करता है)। जाहिरा तौर पर उनके पास है TOP, लेकिन Google परिणामों में बहुत सारे लोग हैं जो इसका उपयोग नहीं कर रहे हैं, इसलिए शायद इसके आसपास कुछ हिजिंक है।
कैट

@ कुछ में यह है , कई अन्य (मानक एसक्यूएल सहित) नहीं है। इस विशिष्ट सिंटैक्स के बारे में ऐसा क्या खास है?
अल्वारो गोंजालेज

यह वाक्य रचना, @ ÁlvaroGonzález के बारे में नहीं है, लेकिन कार्यक्षमता ही बहुत महत्वपूर्ण IMO है। शायद इस मामले के लिए इतना नहीं है (हालांकि मैं इसे अन्य विकल्पों की तुलना में अधिक पठनीय देखता हूं), लेकिन यह स्पष्ट रूप से परिणामों के पृष्ठ पर अंक लगाना के लिए उपयोगी है। जब मैंने "MSSQL सीमा" को देखा, तो मैंने जो कुछ वर्कअराउंड सुझाए थे, वे एक ऐसी विशेषता के लिए पागल थे जो SQL के अभिन्न अंग की तरह महसूस करता है (मुझे यह भी आश्चर्य हुआ कि यह मानक नहीं था - जो ट्रैक कर सकता है वह क्या है और SQL के साथ इतना खंडित नहीं है?)।
कैट

7

यह अपने अवरोधों, चाबियों, अनुक्रमित, पहचान संपत्ति और डेटा पंक्तियों को छोड़कर किसी तालिका की संरचना की नकल करने के लिए उपयोगी हो सकता है ।

यह क्वेरी EMPL_DEMOकर्मचारियों की तालिका से कॉपी की गई पंक्तियों के साथ तालिका बनाएगी क्योंकि WHERE 1=2स्थिति का हमेशा मूल्यांकन किया जाएगा FALSE

  CREATE TABLE EMPL_DEMO 
  AS 
  SELECT * 
  FROM employees 
  WHERE 1=2;

जिज्ञासा से बाहर, तुम कैसे एल एस बाधाओं की नकल करेंगे, आदि?
थोफिर

@ तुफिर सहायक पोस्ट dba.stackexchange.com/questions/65734/…
विश्वनाथ दलवी

6

Google में भरोसा रखो, मेरे दोस्त। जब आप उस कथन को गूगल करते हैं तो पहले परिणाम के नीचे से :

उदाहरण के लिए:

CREATE TABLE suppliers
  AS (SELECT *
    FROM companies WHERE 1=2);

यह आपूर्तिकर्ताओं नामक एक नई तालिका बनाएगा जिसमें कंपनियों की तालिका से सभी कॉलम शामिल होंगे, लेकिन कंपनियों की तालिका से कोई डेटा नहीं।


42
ध्यान दें कि Google खोज परिणामों को प्रत्येक उपयोगकर्ता के लिए अनुकूलित किया जाता है, जो Google के उपयोगकर्ता के बारे में जानने के लिए होता है। इसलिए परिणामों का क्रम सभी के लिए अलग-अलग होने की संभावना है, और परिणामस्वरूप, "पहला परिणाम" सभी के लिए अलग-अलग होने का जोखिम है। मेरे मामले में, उस प्रश्न के लिए शीर्ष परिणाम यह प्रश्न है , और आपके द्वारा लिंक किया गया पृष्ठ भी तीन हिट के बीच प्रदर्शित नहीं होता है।
उपयोगकर्ता

2
जब nth परिणाम को संदर्भित करते हैं, तो एक खोज इंजन का उपयोग करें जैसे DuckDuckGo जिसमें प्रत्येक क्वेरी के लिए समय के साथ स्थिर परिणाम होते हैं।
wizzwizz4

@ MichaelKjörling स्थैतिक ("अवैयक्तिकृत") परिणाम दिखाने के लिए एक विकल्प हुआ करता था। मुझे नहीं पता कि जब यह चारों ओर था तो कितना अच्छा काम किया था, लेकिन यह अब चला गया है, क्योंकि ऐसा लगता है कि उपयोगकर्ता डेटा पेजरैंक एल्गोरिथ्म के साथ बहुत अधिक अंतर हो गया है।
ओल्डमुड 0

1
@ oldmud0: मुझे नहीं लगता कि यह चला गया है? निजी परिणामों के बीच और सभी कस्टम परिणाम निकालें मुझे लगता है कि यह विन्यास योग्य होना चाहिए?
user541686

1
@ मेहरदाद दूसरा लिंक "सभी कस्टम परिणाम निकालें" के तहत कहता है कि आवश्यक चरणों में से एक को अपने Google खाते में साइन इन करना है, इसलिए यह स्पष्ट रूप से उन लोगों के लिए उपलब्ध नहीं है जिनके पास Google खाता नहीं है। साथ ही, सेटिंग का नाम इंगित करता है कि यह केवल विज्ञापनों को प्रभावित करता है , खोज परिणामों को नहीं, लेकिन पाठ संकेत देता है कि यह परिणामों को भी प्रभावित करता है, इसलिए यह स्पष्ट नहीं है।
उपयोगकर्ता

1

आकाशवाणी:

CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=2; //just structure not data

CREATE TABLE EMPL_DEMO AS SELECT * FROM employees WHERE 1=1; //ststructure and data

Teradata डेटाबेस में बेहतर समझ:

CREATE TABLE EMPL_DEMO AS Memployees with no data; //structure

CREATE TABLE EMPL_DEMO AS Memployees with data; //structure and data

1

SQL सर्वर में

तालिका 2 से 1 में तालिका 1 का चयन करें जहाँ 1 = 2 (केवल संरचना)

तालिका 2 से * तालिका 1 में चयन करें जहाँ 1 = 1 (डेटा के साथ संरचना)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.