't güncelleştirme için hedef tablo tümce içinde belirtebilirsiniz
Basit bir mysql tablo var:
CREATE TABLE IF NOT EXISTS `pers` (
`persID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(35) NOT NULL,
`gehalt` int(11) NOT NULL,
`chefID` int(11) DEFAULT NULL,
PRIMARY KEY (`persID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `pers` (`persID`, `name`, `gehalt`, `chefID`) VALUES
(1, 'blb', 1000, 3),
(2, 'as', 1000, 3),
(3, 'chef', 1040, NULL);
Güncelleştirme, aşağıdaki kaçmaya çalıştım, ama sadece hata 1093 alıyorum:
UPDATE pers P
SET P.gehalt = P.gehalt * 1.05
WHERE (P.chefID IS NOT NULL
OR gehalt <
(SELECT (
SELECT MAX(gehalt * 1.05)
FROM pers MA
WHERE MA.chefID = MA.chefID)
AS _pers
))
Hata aradım ve ** 15, ama bana yardım etmiyor mysql aşağıdaki sayfadan bulundu.
Ben sql sorgu düzeltmek için ne yapmalıyım?
CEVAP
Hayır beri bir başka... gönderildi
Sorun ne olursa olsun, saçma bir nedenle MySQL, böyle: sorguları yazmak için izin vermez
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Bu, eğer bir tablo üzerindeUPDATE
/INSERT
/DELETE
bir gidiyorsun, bir iç sorguda bu tablo başvuru yapamazsın(senolabilirancak başvuru dış tablodan bir alan...)
Çözüm bu gibi (SELECT * FROM myTable)
ile alt-sorgu myTable
örneği değiştirmektir
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Görünüşe göre bu, gerekli izin alanları yani örtülü olarak geçici bir tabloya kopyalanır, neden olur.
Bu çözüm 16* *buldum. Not bu makalede, bir:
Sadece gerçek hayatta bu sorgu
SELECT * FROM table
istemiyorsun; ben sadece örnek basit tutmak istedim. Gerçekte, yalnızca en içteki sorguda gerekli sütunları seçme veWHERE
iyi bir madde ekleyerek sonuçları limit de olmalı.
1093 - 't belirtin güncelleme içi...
Nasıl bir SQLite veritabanı için bir t...
Git içinde bir tamamlama için tüm dosy...
Nasıl bir proje içinde tek bir dosya i...
Nasıl Server tablo sütun olup olmadığı...