Mysql 选择不带键列的行

Mysql 选择不带键列的行,mysql,Mysql,我正在尝试使用concat选择具有不匹配/损坏的键列(ID)的匹配记录 下面给出了一个错误错误代码:1054。“where子句”中的未知列“samdb.songlist.album” SELECT tmpsonglist.xfade FROM tmpsonglist WHERE (concat_ws('',tmpsonglist.album, tmpsonglist.genre) = concat_ws('',songlist.album, songlist.genre

我正在尝试使用concat选择具有不匹配/损坏的键列(ID)的匹配记录

下面给出了一个错误
错误代码:1054。“where子句”中的未知列“samdb.songlist.album”

SELECT 
    tmpsonglist.xfade
FROM
    tmpsonglist
WHERE
    (concat_ws('',tmpsonglist.album, tmpsonglist.genre) = concat_ws('',songlist.album, songlist.genre))
samdb.songlist.album
确实存在,我知道查询是使用
进行的,其中tmpsonglist.ID=songlist.ID

我能用这种方法吗?或者我需要一个键列来进行匹配

编辑:

我已经用包含的别名更新了我的尝试,但仍然得到错误
错误代码:1093。无法在FROM子句中为更新指定目标表“歌曲列表”

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;

我猜您想要的查询是:

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

就此查询而言,它不存在。表别名未在
from
子句中定义,因此无法识别
songlist
。别名对我来说是新的:)另外,为什么使用ID列通常会产生好的结果?ID字段通常工作得最好,因为a)它们通常有一个键或主键,并且b)在加入时,可以使用键。当您加入一个表达式,就像您在问题中所做的那样(使用concat_ws),而不仅仅是一个字段时,不能使用键,这会使查询速度慢得多。此时,速度不是一个问题。我正在从备份中恢复一些记录。此选择是一个更大查询的一部分,该查询将更新一些字段数据。@GordonLinoff,请详细说明别名好吗?也许可以提交一个答案。这将非常有帮助:)