SORU
13 Aralık 2010, PAZARTESİ


'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
13 Ocak 2013, Pazar


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 ve WHERE iyi bir madde ekleyerek sonuçları limit de olmalı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • DONFANTASTICKYPESS

    DONFANTASTIC

    1 Temmuz 2007
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012