我提出了一个愚蠢的问题,但我从20分钟后就陷入困境,无法弄清楚为什么这不起作用..
SELECT `A`.*, `B`.`sei` AS `seiAlbum` FROM `Lea_Picture` AS `A` LEFT JOIN
`Lea_Album` AS `B` ON `A`.`idAlbum` = `B`.`idAlbum` WHERE (`seiAlbum` LIKE
'%album_1%') ORDER BY `seiAlbum` ASC LIMIT 50
我有一个
#1054 - Unknown column 'seiAlbum' in 'where clause'
相关表格:
CREATE TABLE IF NOT EXISTS `Lea_Album` (
`idAlbum` int(11) NOT NULL AUTO_INCREMENT,
`sei` varchar(63) COLLATE utf8_unicode_ci DEFAULT NULL,
`name` varchar(63) COLLATE utf8_unicode_ci DEFAULT NULL,
`type` varchar(63) COLLATE utf8_unicode_ci DEFAULT NULL,
`width` int(11) DEFAULT NULL,
`height` int(11) DEFAULT NULL,
PRIMARY KEY (`idAlbum`)
);
CREATE TABLE IF NOT EXISTS `Lea_Picture` (
`idPicture` int(11) NOT NULL AUTO_INCREMENT,
`sei` varchar(63) COLLATE utf8_unicode_ci DEFAULT NULL,
`name` varchar(63) COLLATE utf8_unicode_ci DEFAULT NULL,
`title` varchar(127) COLLATE utf8_unicode_ci DEFAULT NULL,
`order` int(11) DEFAULT NULL,
`pictImage` varchar(127) COLLATE utf8_unicode_ci DEFAULT NULL,
`idAlbum` int(11) DEFAULT NULL,
PRIMARY KEY (`idPicture`)
);
有任何线索吗?
答案 0 :(得分:1)
你不能在where子句中给出别名,你必须给出原始列名
在b.sei
子句
where
SELECT A.*, B.sei AS seiAlbum FROM Lea_Picture AS A LEFT JOIN
Lea_Album AS B ON A.idAlbum = B.idAlbum WHERE (B.sei LIKE
'%album_1%') ORDER BY B.sei ASC LIMIT 50
答案 1 :(得分:1)
列别名在查询的外部应用。您无法在同一查询中引用它。
所以你要么做
where `B`.`sei` LIKE '%album_1%'
(同样适用于order by
中的使用)
或者您需要包装整个查询并在嵌套查询上应用过滤器:
select *
from
(
SELECT `A`.*, `B`.`sei` AS `seiAlbum` FROM `Lea_Picture` AS `A` LEFT JOIN
`Lea_Album` AS `B` ON `A`.`idAlbum` = `B`.`idAlbum`
) A
WHERE (`seiAlbum` LIKE '%album_1%')
ORDER BY `seiAlbum` ASC LIMIT 50
seiAlbum
不在嵌套查询中的范围内,就像B.sei
不在其中的范围内一样。
答案 2 :(得分:0)
这是由于WHERE子句在SELECT子句之前执行。
尝试使用子查询,例如;
SELECT * FROM (SELECT `A`.*, `B`.`sei` AS `seiAlbum` FROM `Lea_Picture` AS `A` LEFT JOIN
`Lea_Album` AS `B` ON `A`.`idAlbum` = `B`.`idAlbum`) A
WHERE (`seiAlbum` LIKE
'%album_1%') ORDER BY `seiAlbum` ASC LIMIT 50