簡體   English   中英

為什么在“ JOIN(SELECT)”語句中使用別名會導致錯誤?

[英]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我試過更換dateAS 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM