[英]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.