سؤال

هل هناك طريقة لتحديث صفوف متعددة مع قيم مختلفة لكل صف باستخدام استعلام SQL واحد؟ لا بد لي من تحديث كولوم واحد في العديد من الصفوف مع بيانات مختلفة. يبدو استخدام استعلامات التحديث الفردي لكل صف مفرط، لذلك إذا كان ذلك ممكنا، أود دمج هذه العملية في عبارة SQL واحدة أو على الأقل تقليل عدد الاستعلامات المطلوبة.

أنا أستخدم PHP مع إطار Zend و MySQL.

هل كانت مفيدة؟

المحلول

إنشاء جدول مؤقت وملءه مع:

CREATE TEMPORARY TABLE temptable (id INTEGER, VALUE VARCHAR(200))

INSERT
INTO temptable
VALUES
  ('1', 'val1'),
  ('2', 'val2'),
  ('3', 'val3'),
  ('4', 'val4')

ثم المشكلة:

UPDATE
  mytable m, temptable t
SET m.value = t.value
WHERE m.id = t.id

نصائح أخرى

لا تعرف ما هي عن MySQL على وجه التحديد، ولكن لتحديث صفوف متعددة بناء على تحديد، أو نقابة من التحديد المتعدد، سأفعل

UPDATE U
SET MyColumn = T.OtherColumn
FROM MyUpdateTable AS U
     JOIN
     (
         SELECT [OtherColumn] = OtherColumn1
         FROM MyOtherTable1
         WHERE ...
         UNION
         SELECT OtherColumn2
         FROM MyOtherTable2
         WHERE ...
     ) AS T
         ON T.ID = U.ID

تحديث 10/28/2014، تم تحويله إلى العمل من أجل MySQL:

UPDATE MyUpdateTable AS U
    JOIN
    (
        SELECT [OtherColumn] = OtherColumn1
        FROM MyOtherTable1
        WHERE ...
        UNION
        SELECT OtherColumn2
        FROM MyOtherTable2
        WHERE ...
    ) AS T
        ON T.ID = U.ID
        SET MyColumn = T.OtherColumn

أعرف أن هذا يعمل ل SQL Server، لذلك يستحق المحاولة في MySQL.

update xtable
set a = 
   Case
     when a = "a"
     then z
     when a = "b"
     then y
   End
where ...

يمكنك إنشاء بيان الحالة بناء على صفوفك المختلفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top