MySQL Güncelleme sorgusunda 'alan listesinde' bilinmeyen sütun hatası


127

Bu güncelleme sorgusunu gerçekleştirmeye çalışırken 1054 numaralı MySQL hatasını alıyorum:

UPDATE MASTER_USER_PROFILE, TRAN_USER_BRANCH
SET MASTER_USER_PROFILE.fellow=`y`
WHERE MASTER_USER_PROFILE.USER_ID = TRAN_USER_BRANCH.USER_ID
AND TRAN_USER_BRANCH.BRANCH_ID = 17

Muhtemelen bir sözdizimi hatasıdır, ancak bunun yerine iç birleştirme ve diğer değişiklikleri kullanmayı denedim, ancak aynı mesajı almaya devam ediyorum:

Unknown column 'y' in 'field list' 

Yanıtlar:


167

Tanımlayıcı tırnak karakteri ters işaret ("" ") olduğundan" y "için farklı tırnaklar kullanmayı deneyin. Aksi takdirde MySQL, "y" adlı bir sütuna işaret ettiğinizi "düşünür".

Ayrıca MySQL 5 Belgelerine bakın


Kafam karıştığında ve dizelerimin etrafında tek tırnak yerine çift tırnak kullandığımda bunu yaşadım.
üçlü

48

Mysql sunucusuna iletilecek herhangi bir dizeyi tek tırnak içine alın; Örneğin:

$name = "my name"
$query = " INSERT INTO mytable VALUES ( 1 , '$name') "

Sorgu çift tırnak arasında olsa da, herhangi bir dizeyi tek tırnak içine almanız gerektiğini unutmayın .


Teşekkür ederim. PHP'deki sorgumun neden çalışmadığını anlamaya çalışıyordum, tek yapmam gereken tek tırnakları eklemekti.
RiCHiE

1
Bunun eski bir gönderi olduğunu biliyorum ama neden alıntı yapmanız gerektiğine cevap verebilir misiniz?
RiCHiE

@RiCHiE dizeleri kullanırken genellikle daha güvenlidir. Ayrıca, tırnakların arasına dizgi koymak bana daha mantıklı geliyor. Örneğin SHA1 gibi işlevleri kullandığınızda, içeriğe alıntılar koyarsınızSHA1('$var')
George

Bu benim için çalıştı. İlk önce şanssız ters tikleri kullanmayı denedim.
radbyx

Lütfen sorgulara geçirilen tüm değişkenlerden doğru şekilde çıkış yapın! $name = mysqli_real_escape_string($name)Alıntılardan doğru şekilde kaçmak için kullanın !
Le 'nton

16

Seçtiğiniz tırnak işaretlerini kontrol edebilirsiniz (değerler, dizeler vb. İçin çift / tek tırnak ve sütun adları için geri işaretler kullanın).

Yalnızca tabloyu güncellemek istediğiniz için master_user_profileiç içe bir sorgu öneririm:

UPDATE
   master_user_profile
SET
   master_user_profile.fellow = 'y'
WHERE
   master_user_profile.user_id IN (
      SELECT tran_user_branch.user_id
      FROM tran_user_branch WHERE tran_user_branch.branch_id = 17);

4

Benim durumumda, sütun adının sonundaki görünmeyen bir boşluktan kaynaklanıyordu. Bunun yerine gerçekten "y" veya "y" kullanıp kullanmadığınızı kontrol edin.


2

İlk önce EF koduyla bir .Net uygulaması derlemesi üzerinde çalışırken, bir ifademin olduğu yerde geçişimi uygulamaya çalışırken bu hata mesajını aldım Sql("UPDATE tableName SET columnName = value");.

SütunAdı'nı yanlış yazdığım ortaya çıktı.


1

Sadece bu konudaki deneyimimi paylaşıyorum. Ben de aynı sorunu yaşıyordum. Ekleme veya güncelleme ifadesi doğru. Ayrıca kodlamayı da kontrol ettim. Sütun mevcut. Sonra! Tetikleyicimdeki sütuna referans verdiğimi öğrendim. Tetikleyicinizi de kontrol etmelisiniz, herhangi bir komut dosyası, sorun yaşadığınız sütuna referans veriyor mu?


1

Sadece bu konudaki deneyimimi paylaşıyorum. Ben de aynı sorunu yaşıyordum. Sorgum şuydu:

select table1.column2 from table1

Ancak, tablo1 sütun2 sütununa sahip değildi.


0

Ben de aynı hatayı aldım, benim durumumda sorun sütun adını GROUP BYmaddeye dahil ettim ve bu hataya neden oldu. Bu yüzden sütunu GROUP BYcümlecikten çıkardı ve işe yaradı !!!


0

Hazırda bekletme ve JPA ise. referans tablo adınızı kontrol edin ve sütunlar uyumsuz olabilir


0

Bir MySQL veritabanında LINQ aracılığıyla GroupBy kullanırken bu hatayı aldım. Sorun, GroupBy tarafından kullanılan anonim nesne özelliğinin veritabanı sütun adıyla eşleşmemesiydi. Anonim özellik adının sütun adıyla eşleşecek şekilde yeniden adlandırılmasıyla düzeltildi.

.Select(f => new 
{
   ThisPropertyNameNeedsToMatchYourColumnName = f.SomeName
})
.GroupBy(t => t.ThisPropertyNameNeedsToMatchYourColumnName);

0

Bunun gibi bir sorgu da hataya neden olur:

SELECT table1.id FROM table2

Tablonun sütunda belirtildiği yerde seçin ve from maddesine dahil edilmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.