我正在使用MySQL 5.5.16为什么在“JOIN(SELECT)”语句中使用别名会导致错误?
我有以下查询,它本身工作得很好。
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
。下面是一个例子,其中上面的查询里面有个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 我已经试过了inner_date
更换date
在内部查询的AS date
一部分,但只是抛出另一个错误Unknown column 'inner_date' in 'where clause'
...
您的查询不知道是什么表了'date'场是从哪里来的,你需要用正确的别名限定它。 – Taryn