এসকিউএল আপডেট আপডেট একটি কলাম একটি আলাদা কলাম দ্বারা রেফারেন্স সম্পর্কিত টেবিল একটি মান সমান?


112

আমি আশা করি যে এই ধারণাটি তৈরি হয়েছে, আমাকে বিস্তারিতভাবে বলুন:

কুইজ প্রোগ্রামের জন্য ট্র্যাকিং ডেটার একটি টেবিল রয়েছে যেখানে প্রতিটি সারি থাকে ..

প্রশ্নআইডি এবং উত্তর আইডি (প্রত্যেকের জন্য একটি সারণী রয়েছে)। সুতরাং একটি ত্রুটির কারণে এনআইএলএল-তে গুচ্ছ প্রশ্নাবলীর সেট ছিল, তবে সম্পর্কিত উত্তরআইডি-এর প্রশ্নআইডি উত্তর সারণীতে রয়েছে।

সুতরাং বলুন, প্রশ্নআইডিটি নুল এবং উত্তর আইডি 500 হয়, যদি আমরা উত্তর সারণীতে গিয়ে উত্তর আইডি 500 পাই তবে প্রশ্নআইডির সাথে একটি কলাম রয়েছে যা নুওল মান যেখানে হওয়া উচিত ছিল।

সুতরাং মূলত আমি ট্র্যাকিংস সারণিতে থাকা উত্তরআইডির উত্তর সারিতে উত্তর সারণীতে প্রাপ্ত নূন্য প্রশ্নাবলীর সমান হিসাবে প্রতিটি ন্যূনাল প্রশ্নপত্র সেট করতে চাই (নূন্য প্রশ্নোত্তরের মতো একই সারি যা লেখা হচ্ছে)।

আমি এই কিভাবে করব?

UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?

নিশ্চিত নয় যে আমি কীভাবে এটি মিলিয়ে থাকা উত্তরআইডি থেকে প্রশ্নআইডির জন্য প্রশ্নআইডিকে বরাদ্দ করতে সক্ষম হব ...


মাইএসকিউএল এবং মাইক্রোসফ্ট এসকিউএল সার্ভার একাধিক-টেবিল আপডেট আপডেট করতে এসকিউএল সিনট্যাক্সে এক্সটেনশনগুলি সমর্থন করে। অন্যান্য ব্র্যান্ড না। আপনি কোন ব্র্যান্ডের ডাটাবেস ব্যবহার করছেন তা আপনি বলেননি।
বিল কারভিন 21

উত্তর:


171
update q
set q.QuestionID = a.QuestionID
from QuestionTrackings q
inner join QuestionAnswers a
on q.AnswerID = a.AnswerID
where q.QuestionID is null -- and other conditions you might want

আমি আপডেটটি চালানোর আগে আপডেটের ফলাফলটি সেট কী তা যাচাই করার পরামর্শ দিচ্ছি (একই কোয়েরি, কেবল একটি নির্বাচন দিয়ে):

select *
from QuestionTrackings q
inner join QuestionAnswers a
on q.AnswerID = a.AnswerID
where q.QuestionID is null -- and other conditions you might want

বিশেষত প্রতিটি উত্তর আইডিতে অবশ্যই 1 টি সম্পর্কিত প্রশ্ন আইডি রয়েছে কিনা।


7
আমি নিশ্চিত না কেন তবে এটি আমার পক্ষে কাজ করে না, তবে এটি এটি করে: update QuestionTrackings q inner join QuestionAnswers a on q.AnswerID = a.AnswerID set q.QuestionID = a.QuestionID; ভিন্ন ক্রমে একই বুনিয়াদি ক্যোয়ারী বলে মনে হচ্ছে। কোন ধারণা কেন?
বিলেণোহ

2
@ বিলিলোনা, ওআআআর -00971: ওরাকলে
এসইটি

2
মাইএসকিউএল ধরে পিএইচপিএমএইডমিনে একই ধরণের সমস্যা নিয়ে সমস্যা। আমার ক্ষেত্রে, উত্স এবং গন্তব্য কলামগুলি একই টেবিলে রয়েছে, তবে রেকর্ড নির্বাচন অন্যান্য টেবিলের উপর ভিত্তি করে। ক্যোয়ারির "নির্বাচন" সংস্করণটি কাজ করে তবে UPDTATE বিবৃতিটি "FROM"
2:44 নাইনরোমো

3
আমি "FROM" মুছে UPDATE table1 NATURAL JOIN table2 SET table1.col1 = table1.col2 WHERE table2.col3 ="condition"
ফেলার

আক্ষরিক ক্যোয়ারী প্যারামিটার উত্তরে "আপডেট কি" থেকে "কিউ" বা এটি কোনও টেবিলের নামের জন্য কেবল আপনার শর্টহ্যান্ড?
শন

28

আপডেট-এবং-যোগ সংকেত ছাড়াই (সমস্ত ডিবিএমএস সমর্থন করে না) ব্যবহার করুন:

UPDATE QuestionTrackings
   SET QuestionID = (SELECT QuestionID
                        FROM AnswerTrackings
                        WHERE AnswerTrackings.AnswerID = QuestionTrackings.AnswerID)
   WHERE QuestionID IS NULL
     AND EXISTS(SELECT QuestionID
                        FROM AnswerTrackings
                        WHERE AnswerTrackings.AnswerID = QuestionTrackings.AnswerID)

প্রায়শই এর মতো কোয়েরিতে আপনাকে সাব-কোয়েরি থাকা একটি বিদ্যমান অধ্যায় সহ WHERE ধারাটির যোগ্যতা অর্জন করতে হবে। এটি আপডিকে সারিগুলিতে পদদলিত হতে বাধা দেয় যেখানে কোনও মিল নেই (সাধারণত সমস্ত মানগুলি বাতিল করে)। এই ক্ষেত্রে, যেহেতু একটি অনুপস্থিত প্রশ্ন আইডি NUL কে NULL এ বদলে দেবে, তর্কাতীতভাবে এটি কোনও বিষয় নয়।


এই পদ্ধতিটি আমার জন্য ওরাকল 12 সি তে কাজ করেছে (যেখানে আপডেট-যোগ পদ্ধতিটি ব্যর্থ হয়েছে)।
shwartz

16

আমি জানি না আপনি মাইএসকিউএল ওয়ার্কবেঞ্চে আমার চেয়ে একই সমস্যাটি নিয়ে চলেছেন তবে বিবৃতিটি আমার পক্ষে কার্যকর না INNER JOINহওয়ার পরে কোয়েরিটি চালাচ্ছেন FROM। প্রোগ্রামটি FROMবিবৃতি সম্পর্কে অভিযোগ করার কারণে আমি কোয়েরিটি চালাতে পারিনি ।

সুতরাং ক্যোয়ারির কাজটি করার জন্য আমি এটিকে পরিবর্তন করেছি

UPDATE table1 INNER JOIN table2 on table1.column1 = table2.column1
SET table1.column2 = table2.column4
WHERE table1.column3 = 'randomCondition';

পরিবর্তে

UPDATE a
FROM table1 a INNER JOIN table2 b on a.column1 = b.column1
SET a.column2 = b.column4
WHERE a.column3 = 'randomCondition';

আমার ধারণা আমার সমাধানটি মাইএসকিউএল-এর সঠিক বাক্য গঠন।


হ্যাঁ, মাইকিউএলএর মতো দেখায়, জওআইএনকে কোয়েরির 'টেবিল_সংশ্লিষ্ট' অংশ হিসাবে বিবেচনা করা হয়। মাইএসকিউএল যোগদান
এডাব্লুপি

12
UPDATE
    "QuestionTrackings"
SET
    "QuestionID" = (SELECT "QuestionID" FROM "Answers" WHERE "AnswerID"="QuestionTrackings"."AnswerID")
WHERE
    "QuestionID" is NULL
AND ...

1
আমার জন্য ওরাকল উপর কাজ। @ ইল্লাসিয়াসের উত্তর দেয় নি।
লম্বাস

7

আমি একই প্রশ্ন ছিল। এখানে ওয়ার্কিং সলিউশন যা এলেসাসিয়াসের অনুরূপ। আমি পোস্টগ্র্যাস্কেল ব্যবহার করছি।

UPDATE QuestionTrackings
SET QuestionID = a.QuestionID
FROM QuestionTrackings q, QuestionAnswers a
WHERE q.QuestionID IS NULL

এটি অভিযোগ করে যে লাইন 1-এ টেবিলের নামের জায়গায় q ব্যবহার করা হয়েছিল এবং লাইন 2-তে প্রশ্নআইডির আগে কোনও কিছু করা উচিত নয়।


3
 select p.post_title,m.meta_value sale_price ,n.meta_value   regular_price
    from  wp_postmeta m 
    inner join wp_postmeta n
      on m.post_id  = n.post_id
    inner join wp_posts p
      ON m.post_id=p.id 
    and m.meta_key = '_sale_price'
    and  n.meta_key = '_regular_price'
     AND p.post_type = 'product';



 update  wp_postmeta m 
inner join wp_postmeta n
  on m.post_id  = n.post_id
inner join wp_posts p
  ON m.post_id=p.id 
and m.meta_key = '_sale_price'
and  n.meta_key = '_regular_price'
 AND p.post_type = 'product'
 set m.meta_value = n.meta_value;

3

মাইএসকিএল-এর জন্য আপনি এই ক্যোয়ারীটি ব্যবহার করতে পারেন

টেবিল 1 এ, টেবিল 2 খ আপডেট করুন


1

1 ম টেবিলের 2 য় সারণীর ডেটা আপডেট করুন এসইটি এর আগে অভ্যন্তরীণ যোগদানের প্রয়োজন:

`UPDATE `table1` INNER JOIN `table2` ON `table2`.`id`=`table1`.`id` SET `table1`.`name`=`table2`.`name`, `table1`.`template`=`table2`.`template`;

1

নীচে mysql জন্য কাজ করে

update table1 INNER JOIN table2 on table1.col1 =  table2.col1
set table1.col1 =  table2.col2

0

আমি এই কাজ করা উচিত।

UPDATE QuestionTrackings
SET QuestionID = (SELECT QuestionID
                  FROM AnswerTrackings
                  WHERE AnswerTrackings.AnswerID = QuestionTrackings.AnswerID)
WHERE QuestionID IS NULL
AND AnswerID IS NOT NULL;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.