MySQL: ВЫБЕРИТЕ EXISTS () КАК поле ГДЕ поле = х - PullRequest
1 голос
/ 29 марта 2011

Проблема: у меня есть инвентарная таблица и таблица с предметами, которые выставляются на аукцион.Я хочу, чтобы поле псевдонима ("isAuction") представляло, присутствует ли предмет с инвентарным номером в таблице предметов аукциона.

Я написал следующий запрос:

SELECT FROM inventory AS i
EXISTS(SELECT * FROM auctionitems AS a WHERE a.stockNo = i.stockNo) AS "isAuction" 

Это заполнит поле «isAuction» 1 или 0, как требуется.

Теперь я добавляю условие WHERE:

SELECT FROM inventory AS i
EXISTS(SELECT * FROM auctionitems AS a WHERE a.stockNo = i.stockNo) AS "isAuction" 
WHERE isAuction = 1

Однако, когда я добавляю условие WHERE, я получаюошибка: «# 1054 - Неизвестный столбец« isAuction »в« предложении where »»

Два вопроса: 1) Где я ошибся?2) Есть ли лучший способ решить мою проблему?

Ответы [ 3 ]

2 голосов
/ 29 марта 2011

Попробуйте HAVING isAuction = 1.

Я где-то читал, что HAVING более просчитан из вычисляемых столбцов, чем WHERE.

2 голосов
/ 29 марта 2011
SELECT i.*
FROM inventory AS i
WHERE EXISTS(SELECT * FROM auctionitems AS a WHERE a.stockNo = i.stockNo)
1 голос
/ 29 марта 2011

Вы не можете использовать псевдонимы в WHERE.Вы можете сделать

WHERE EXISTS(SELECT * FROM auctionitems AS a WHERE a.stockNo = i.stockNo) 

Или вы можете поместить условие в предложение HAVING (mysql позволяет использовать HAVING без агрегатных функций): HAVING isAuction = 1 Также вы можете написать

SELECT * FROM 
(SELECT i.*,
 EXISTS(SELECT * FROM auctionitems AS a WHERE a.stockNo = i.stockNo) AS isAuction 
 FROM inventory AS i

)a
WHERE a.isAuction = 1
...