MySQL: क्वेरी के परिणाम से उपयोगकर्ता चर सेट करें


197

क्या MySQL में क्वेरी के परिणाम के आधार पर एक उपयोगकर्ता चर सेट करना संभव है?

जो मैं हासिल करना चाहता हूं वह कुछ इस तरह है (हम मान सकते हैं कि दोनों अद्वितीय हैं USERऔर GROUPहैं):

set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;

कृपया ध्यान दें कि मुझे पता है कि यह संभव है लेकिन मैं नेस्टेड प्रश्नों के साथ ऐसा नहीं करना चाहता।

जवाबों:


333

हां, लेकिन आपको चर असाइनमेंट को क्वेरी में स्थानांतरित करने की आवश्यकता है:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

परीक्षण का मामला:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);

परिणाम:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)

ध्यान दें कि या SETतो =या :=असाइनमेंट ऑपरेटर के रूप में उपयोग किया जा सकता है। हालाँकि, अन्य कथनों के अंदर, असाइनमेंट ऑपरेटर होना चाहिए :=और नहीं =क्योंकि =गैर-एसईटी बयानों में तुलना ऑपरेटर के रूप में माना जाता है।


अपडेट करें:

नीचे टिप्पणी करने के लिए, आप निम्नलिखित भी कर सकते हैं:

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;

3
Btw, क्या आप पहले कथन (इसके केवल चर असाइनमेंट के रूप में) के आउटपुट को दबा सकते हैं और केवल दूसरी क्वेरी के आउटपुट को दिखा सकते हैं?
अवदा केदावरा

3
@ अवाडा: एक विकल्प के साथ मेरे उत्तर को अपडेट करें, जो चर असाइनमेंट के लिए परिणाम नहीं देता है।
डैनियल वेसलो

1
@DanielVassallo, वहाँ भी है select grop into @group from user limit 1
पचेरियर

@DanielVassallo आपका बहुत बहुत धन्यवाद। क़ानून "INTO" बहुत मददगार है। मैं चयन वापस किए बिना चयन से mysql var सेट करना चाह रहा था। धन्यवाद!
लुइस एंटोनियो पेस्ताना

68

क्वेरी के चारों ओर कोष्ठक जोड़ें:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;

यह Subquery returns more than 1 rowमेरे लिए परिणाम
timbroder

1
@timbroder क्वेरी में केवल LIMIT 1 जोड़ें। वैसे भी, मैंने उसे ठीक करने के लिए एक संपादन का सुझाव दिया।
Youkko

12

पहले हमें इस बात पर ध्यान देना चाहिए कि हम mysql में एक चर को कैसे परिभाषित कर सकते हैं

Mysql में एक परिवर्तनीय को परिभाषित करने के लिए इसे '@' की तरह @ {variable_name} और इस '{variable_name}' से शुरू करना चाहिए, हम इसे अपने वैरिएबल नाम से बदल सकते हैं।

अब, mysql में एक चर में एक मूल्य कैसे निर्दिष्ट करें। इसके लिए हमारे पास कई तरीके हैं

  1. 'SET' कीवर्ड का उपयोग करना।

उदाहरण :-

mysql >  SET @a = 1;
  1. कीवर्ड 'सेट' का उपयोग किए बिना और ': =' का उपयोग किए बिना।

उदाहरण:-

mysql > @a:=1;
  1. 'सेलेक्ट' स्टेटमेंट का उपयोग करके।

उदाहरण:-

mysql > select 1 into @a;

यहां @a उपयोगकर्ता परिभाषित चर है और 1 @ में असाइन होने जा रहा है।

अब @ {variable_name} का मान कैसे प्राप्त करें या उसका चयन करें।

हम चुनिंदा कथन का उपयोग कर सकते हैं

उदाहरण :-

mysql > select @a;

यह आउटपुट दिखाएगा और @a का मान दिखाएगा।

अब एक चर में तालिका से एक मान कैसे निर्दिष्ट करें।

इसके लिए हम दो स्टेटमेंट का उपयोग कर सकते हैं जैसे: -

1।

@a := (select emp_name from employee where emp_id = 1);
select emp_name into @a from employee where emp_id = 1;

सदैव सावधान रहें emp_name को एकल मूल्य वापस करना होगा अन्यथा यह इस प्रकार के बयानों में आपको त्रुटि देगा।

इसे देखें: - http://www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql


7

इस तरह का उपयोग करें ताकि संग्रहीत कार्यविधि को चलाते समय परिणाम प्रदर्शित न हो

पूछताछ:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.