SQL别名/ WHERE

时间:2015-03-17 10:19:51

标签: sql join where alias

我提出了一个愚蠢的问题,但我从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`)
    );

有任何线索吗?

3 个答案:

答案 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
相关问题