2015-01-05 3 views
-1

Я пытаюсь выбрать соответствующие записи, которые имеют несогласованные/поврежденные ключевые столбцы (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; 
+0

Этого не существует в отношении этого запроса. Алиас таблицы не определен в предложении 'from', поэтому' songlist' не распознается. –

+0

Ah OK, я задавался вопросом, нужен ли мне псевдоним, но это было не в ошибке. Alias ​​'новы для меня :) И как получается, что с помощью столбцов ID получается хороший результат? –

+0

Идентификационные поля обычно работают лучше всего потому, что: a) у них обычно есть ключ или первичный ключ на них, и b) при подключении к ним ключ может использоваться. Когда вы присоединяетесь к выражению, которое вы делаете в своем вопросе (используя concat_ws), а не просто в поле, ключ не может использоваться, делая запрос намного медленнее. – Tom

ответ

0

Моя догадка, что запрос вы хотите:

UPDATE samdb.songlist s 
    SET s.xfade = (SELECT t.xfade 
        FROM tmpsonglist t 
        WHERE t.album = s.album AND filename LIKE '%201501.mp3' 
       ); 

Обратите внимание, что если нет совпадения, xfade будет установлен на NULL с вашей логикой.

Смежные вопросы