Mysql 选择不带键列的行
我正在尝试使用concat选择具有不匹配/损坏的键列(ID)的匹配记录 下面给出了一个错误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
错误代码: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,请详细说明别名好吗?也许可以提交一个答案。这将非常有帮助:)