মাইএসকিউএল: প্রশ্নের ফলাফল থেকে ব্যবহারকারী পরিবর্তনশীল সেট করুন


195

মাইএসকিউএলে কোনও প্রশ্নের ফলাফলের ভিত্তিতে কোনও ব্যবহারকারী পরিবর্তনশীল সেট করা সম্ভব?

আমি কি অর্জন করতে চান ভালো কিছু (আমরা উভয় যে অনুমান করতে পারেন হয় USERএবং GROUPঅনন্য):

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

দয়া করে নোট করুন যে আমি জানি এটি সম্ভব কিন্তু আমি নেস্টেড কোয়েরি দিয়ে এটি করতে চাই না।

উত্তর:


330

হ্যাঁ, তবে আপনার ভেরিয়েবল অ্যাসাইনমেন্টটি ক্যোয়ারিতে স্থানান্তর করতে হবে:

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
বিটিডব্লিউ, আপনি কি প্রথম স্টেটমেন্টের আউটপুট (তার একমাত্র ভেরিয়েবল অ্যাসাইনমেন্ট হিসাবে) দমন করতে পারবেন এবং কেবল দ্বিতীয় ক্যোয়ারীর আউটপুটটি প্রদর্শন করতে পারবেন?
আভাদা কেদাভরা

3
@ আভাদা: আমার উত্তরটি একটি বিকল্প দিয়ে আপডেট করেছে, যা ভেরিয়েবল অ্যাসাইনমেন্টের জন্য ফলাফল আউট করে না।
ড্যানিয়েল ভ্যাসালো

1
@ ড্যানিয়েলভাসালো, এছাড়াও আছে select grop into @group from user limit 1
পেসারিয়ার

@ ড্যানিয়েলভ্যাসাল্লো আপনাকে অনেক ধন্যবাদ "INTO" স্ট্যাটমেন্টটি খুব সহায়ক। আমি সিলেক্ট না করেই সিলেক্ট থেকে মাইএসকিএল ভার সেট করার সন্ধান করছিলাম। ধন্যবাদ!
লুইস অ্যান্টোনিও পেস্তানা

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আমার জন্য ফলাফল
টিম্বব্রোডার

1
@timbroder ক্যোয়ারিতে সীমাবদ্ধভাবে 1 টি সীমাবদ্ধ করুন। যাইহোক, আমি এটিকে সংশোধন করার জন্য একটি সম্পাদনার পরামর্শ দিয়েছি।
Youkko

11

প্রথমে এক নজরে আসুন আমরা কীভাবে মাইএসকিএল-তে একটি পরিবর্তনশীল সংজ্ঞা দিতে পারি

মাইএসকিএলে কোনও ভেরিয়েবল সংজ্ঞায়িত করার জন্য এটি '@' এর মতো @ {ভেরিয়েবল_নাম} এবং এই '{ভেরিয়েবল_নাম}' দিয়ে শুরু হওয়া উচিত, আমরা এটি আমাদের চলক নামের সাথে প্রতিস্থাপন করতে পারি।

এখন, কীভাবে mysql এ ভেরিয়েবলের মান নির্ধারণ করতে হয় assign এর জন্য আমাদের তা করার অনেক উপায় আছে

  1. 'এসইটি' কীওয়ার্ড ব্যবহার করে।

উদাহরণ: - mysql> SET @a = 1;

  1. 'SET' কীওয়ার্ড ব্যবহার না করে এবং ': =' ব্যবহার না করে।

উদাহরণ: - মাইএসকিএল> @ ক: = 1;

  1. 'নির্বাচন' বিবৃতি ব্যবহার করে।

উদাহরণ: - mysql> 1 এ @ এ নির্বাচন করুন;

এখানে @a টি ব্যবহারকারী সংজ্ঞায়িত ভেরিয়েবল এবং 1 টি @a তে নির্ধারিত হতে চলেছে।

এখন কীভাবে @ {ভেরিয়েবল_নাম} এর মান পাবেন বা নির্বাচন করবেন}

আমরা যেমন নির্বাচনী বিবৃতি ব্যবহার করতে পারেন

উদাহরণ: -

mysql> @a নির্বাচন করুন;

এটি আউটপুট প্রদর্শন করবে এবং @ এর মান প্রদর্শন করবে।

একটি ভেরিয়েবলের টেবিল থেকে কীভাবে একটি মূল্য নির্ধারণ করা যায়।

এর জন্য আমরা দুটি বিবৃতি ব্যবহার করতে পারি যেমন:

  1. @ এ: = (কর্মচারী থেকে এমপ_নাম নির্বাচন করুন যেখানে এমপি_আইডি = 1);

  2. কর্মচারী থেকে এমপিনামকে @a তে নির্বাচন করুন যেখানে এমপিড = 1;

সর্বদা সতর্ক থাকুন এমপ_নাম অবশ্যই একক মান ফেরত দিতে হবে অন্যথায় এটি আপনাকে এই ধরণের বিবৃতিতে ত্রুটি ছুঁড়ে দেবে।

এটি উল্লেখ করুন:


7

এইভাবে ব্যবহার করুন যাতে সঞ্চিত প্রক্রিয়া চলাকালীন ফলাফলটি প্রদর্শিত হবে না

ক্যোয়ারী:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.