[英]Why does using an alias inside a “JOIN (SELECT)” statement result in an error?
我正在使用MySQL 5.5.16
我有以下查询,它本身就可以正常工作。
SELECT DISTINCT i.id,
CASE WHEN e.date > '2012-10-16'
THEN e.date
ELSE '9999-99-99'
END AS date,
CASE WHEN e.date > '2012-10-16'
THEN time
ELSE '99-99-99'
END AS time
FROM items AS i
LEFT JOIN expiration AS e ON ( e.item_id = i.id )
WHERE (
(
data >= '2012-10-16'
AND e.valid=1
)
OR i.never_expires=1
)
AND i.valid=1
ORDER BY date ASC , time ASC
LIMIT 0 , 10
但是,当我将其包含在较大的查询中时, Column 'date' in where clause is ambiguous
出现错误Column 'date' in where clause is ambiguous
。 这是上面的查询在JOIN
内的示例:
SELECT i.id, i.title, i.never_expires,
CASE WHEN e.date> '2012-10-16'
THEN e.date
ELSE '9999-99-99'
END AS date,
CASE WHEN e.date > '2012-10-16'
THEN e.time
ELSE '99-99-99'
END AS time, i.item_price AS price
FROM items AS i
LEFT JOIN expiration AS e ON ( e.item_id = i.id )
JOIN (
SELECT DISTINCT i.id,
CASE WHEN e.date > '2012-10-16'
THEN e.date
ELSE '9999-99-99'
END AS date,
CASE WHEN e.date > '2012-10-16'
THEN time
ELSE '99-99-99'
END AS time
FROM items AS i
LEFT JOIN expiration AS e ON ( e.item_id = i.id )
WHERE (
(
data>= '2012-10-16'
AND e.valid=1
)
OR i.never_expires=1
)
AND i.valid=1
ORDER BY date ASC , time ASC
LIMIT 0 , 10
) AS ilist ON (i.id=ilist.id)
WHERE (
(
date >= '2012-10-16'
AND e.valid=1
)
OR i.never_expires=1
)
AND i.valid=1
ORDER BY dateASC , time ASC
为什么声称date
不明确?
PS我试过更换date
在AS date
与内部查询的一部分inner_date
,但只是抛出另一个错误Unknown column 'inner_date' in 'where clause'
...
您正在将expiration
表(具有名为date
的列)连接到expiration
化表(其本身具有名为date
的列(来自CASE
表达式))。 您应该在WHERE
子句中使用要引用的表的别名来限定date
的使用。
或者:
WHERE (
(
ilist.date >= '2012-10-16'
AND e.valid=1
)
要么:
WHERE (
(
e.date >= '2012-10-16'
AND e.valid=1
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.