Я пытаюсь выбрать соответствующие записи, которые имеют несогласованные/поврежденные ключевые столбцы (ID) с помощью concat.Выбор строк без ключевого столбца
Ниже дает мне ошибку Error Code: 1054. Unknown column 'samdb.songlist.album' in 'where clause'
SELECT
tmpsonglist.xfade
FROM
tmpsonglist
WHERE
(concat_ws('',tmpsonglist.album, tmpsonglist.genre) = concat_ws('',songlist.album, songlist.genre))
samdb.songlist.album
действительно существует, и я знаю, что запрос работает с использованием WHERE tmpsonglist.ID = songlist.ID
.
Могу ли я использовать concat таким образом? Или мне нужно иметь ключевой столбец, чтобы сделать это совпадение?
Edit:
Я обновил мою попытку с псевдонимом включен, но все еще получаю ошибку Error Code: 1093. You can't specify target table 'songlist' for update in FROM clause
SET SQL_SAFE_UPDATES=0;
UPDATE samdb.songlist
SET
songlist.xfade = (SELECT
t.xfade
FROM
tmpsonglist AS t,
songlist AS s
WHERE
t.album = s.album
AND filename LIKE '%201501.mp3');
SET SQL_SAFE_UPDATES=1;
Этого не существует в отношении этого запроса. Алиас таблицы не определен в предложении 'from', поэтому' songlist' не распознается. –
Ah OK, я задавался вопросом, нужен ли мне псевдоним, но это было не в ошибке. Alias 'новы для меня :) И как получается, что с помощью столбцов ID получается хороший результат? –
Идентификационные поля обычно работают лучше всего потому, что: a) у них обычно есть ключ или первичный ключ на них, и b) при подключении к ним ключ может использоваться. Когда вы присоединяетесь к выражению, которое вы делаете в своем вопросе (используя concat_ws), а не просто в поле, ключ не может использоваться, делая запрос намного медленнее. – Tom