سؤال
هل هناك طريقة لتحديث صفوف متعددة مع قيم مختلفة لكل صف باستخدام استعلام 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 ...
يمكنك إنشاء بيان الحالة بناء على صفوفك المختلفة.
لا تنتمي إلى StackOverflow