Невідома стовпчик у списку полів у запиті оновлення MySQL


127

Я намагаюся отримувати помилку MySQL №1054 під час спроби виконати цей запит на оновлення:

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

Можливо, це якась синтаксична помилка, але я намагався використовувати замість цього внутрішнє з'єднання та інші зміни, але я отримую те саме повідомлення:

Unknown column 'y' in 'field list' 

Відповіді:


167

Спробуйте використати різні лапки для "у", оскільки символом цитата ідентифікатора є зворотний вибір ("` "). В іншому випадку MySQL "думає", що ви вказуєте на стовпчик з назвою "y".

Див. Також Документація MySQL 5


У мене це було, коли я плутався і використовував подвійні лапки замість одинарних цитат навколо своїх рядків.
трійчатка

48

Закрийте будь-яку рядок, який буде передано серверу mysql, всередині одиничних лапок; наприклад:

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

Зауважте, що хоча запит укладено між подвійними лапками, ви повинні вкласти будь-який рядок в одинарні лапки.


Дякую. Я намагався з'ясувати, чому мій запит у PHP не працює, я лише повинен був додати єдині лапки.
RiCHiE

1
Я знаю, що це стара публікація, але чи зможете ви відповісти, чому вам потрібно ставити цитати?
RiCHiE

@RiCHiE зазвичай безпечніше при використанні рядків. Крім того, для мене більше сенсу ставити рядок між цитатами. Наприклад, використовуючи такі функції, як SHA1, ви ставите цитати у вмісті всередині, наприкладSHA1('$var')
Джордж

Це працювало для мене. По-перше, я спробував використовувати беккетки без удачі.
radbyx

Будь ласка, уникайте всіх змінних, переданих у запити належним чином! Просто використовуйте, $name = mysqli_real_escape_string($name)щоб уникнути цитат правильно!
Le '

16

Ви можете перевірити свій вибір лапок (використовуйте подвійні / одиничні лапки для значень, рядків тощо та зворотні посилання для імен стовпців).

Оскільки ви хочете лише оновити таблицю, master_user_profileя рекомендую вкладений запит:

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

У моєму випадку це було спричинено невидимим пробілом в кінці назви стовпця. Просто перевірте, чи дійсно ви замість цього використовуєте "y" або "y".


2

Під час роботи над .Net додатком зі створенням коду EF спочатку я отримав це повідомлення про помилку при спробі застосувати міграцію там, де я мав Sql("UPDATE tableName SET columnName = value");заяву.

Виявляється, я неправильно написав колонкуName.


1

Просто ділюсь своїм досвідом щодо цього. У мене виникло те саме питання. Заява вставки або оновлення правильна. І я також перевірив кодування. Стовпчик існує. Тоді! Я дізнався, що я посилався на колонку в моєму тригері. Ви також повинні перевірити свій тригер, щоб побачити, чи будь-який скрипт посилається на стовпець, з яким у вас проблема.


1

Просто ділюсь своїм досвідом щодо цього. У мене виникло те саме питання. Мій запит виглядав так:

select table1.column2 from table1

Однак у таблиці1 не було стовпця колонки2.


0

Я теж отримав ту саму помилку, проблема в моєму випадку полягає в тому, що я включив ім'я стовпця в GROUP BYпункт і це спричинило цю помилку. Так вилучив стовпчик із GROUP BYпункту і він працював !!!


0

Якщо це сплячий і JPA. перевірити назву вказаної таблиці та стовпці, можливо, невідповідність


0

Я отримав цю помилку під час використання GroupBy через LINQ в базі даних MySQL. Проблема полягала в тому, що властивість анонімного об'єкта, яку використовував GroupBy, не відповідало імені стовпця бази даних. Виправлено шляхом перейменування анонімного імені властивості, щоб відповідати імені стовпця.

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

0

Цей запит також спричинить помилку:

SELECT table1.id FROM table2

Там, де таблиця вказана у виборі стовпців та не включена у пункт із пункту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.