multiple - update sql php




SQL UPDATE SET عمود واحد ليكون مساويا لقيمة في جدول مرتبط من قبل عمود مختلف؟ (5)

آمل أن يكون من المنطقي ، اسمحوا لي أن أتوسع:

هناك جدول لتتبع البيانات لبرنامج اختبار حيث يحتوي كل صف على ..

QuestionID و AnswerID (هناك جدول لكل منهما). لذلك بسبب وجود خطأ هناك مجموعة من QuestionIDs مضبوطة إلى NULL ، لكن معرف السؤال لـ AnswerID ذي صلة موجود في جدول الإجابات.

لذلك ، فإن QuestionID هو NULL و AnswerID هو 500 ، إذا انتقلنا إلى جدول الإجابات ووجدنا AnswerID 500 هناك عمود ذو معرف Questionid الذي يجب أن يكون فيه قيمة NULL.

بشكل أساسي أريد تعيين كل QuestionID NULL ليكون مساوياً لـ QuestionID الموجود في جدول "الإجابات" في صف الإجابة من AnswerID الموجود في جدول التعقّب (الصف نفسه كـ QuestionID NULL قيد الكتابة).

كيف يمكنني ان افعل هذا؟

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

لست متأكدا كيف سأكون قادرا على جعلها تحدد QuestionID إلى معرف السؤال من answerID المطابق ...


بدون تدوين التحديث والتجمع (وليس كل دعم DBMS ذلك) ، استخدم:

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 مع جملة EXISTS التي تحتوي على الاستعلام الفرعي. هذا يمنع UPDATE من trampling عبر الصفوف حيث توجد لم تطابق (عادةً إلغاء كافة القيم). في هذه الحالة ، نظرًا لأن معرف السؤال المفقود سيؤدي إلى تغيير NULL إلى NULL ، فلا جدال فيه.


تحديث بيانات الجدول الثاني في الجدول الأول تحتاج إلى انضمام Inner قبل SET:

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

لا أعرف ما إذا كنت قد واجهت نفس المشكلة مني على MySQL Workbench ولكن تشغيل الاستعلام مع INNER JOIN بعد أن لم يعمل بيان FROM بالنسبة لي. لم أتمكن من تشغيل الاستعلام لأن البرنامج اشتكى 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';

أعتقد أن حلّي هو التركيب الصحيح لقواعد MySQL.


 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;

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

لا سيما إذا كان كل معرف الإجابة لديه بالتأكيد سؤال سؤال مرتبط واحد فقط.





sql