It does appear to be some type of bug to me.

Clearly from the select, the Typename field is not null, as shown here.

mysql> SELECT *, TypeName Is NULL, TypeName IS NOT NULL FROM `myview`;
+----+------+----------+------------------+----------------------+
| ID | Type | TypeName | TypeName Is NULL | TypeName IS NOT NULL |
+----+------+----------+------------------+----------------------+
|  1 | NULL |          |                0 |                    1 |
+----+------+----------+------------------+----------------------+
1 row in set (0.00 sec)

But when referenced in the where clause in any manner, no results are returned.

mysql> SELECT *, TypeName Is NULL, TypeName IS NOT NULL FROM `myview` where TYPE
NAME IS NOT NULL;
Empty set (0.00 sec)


-----Original Message-----
From: Daniel Kraft [mailto:d...@domob.eu] 
Sent: Friday, April 22, 2011 1:05 PM
To: Daevid Vincent
Cc: mysql@lists.mysql.com
Subject: Re: WHERE does not work on calculated view field - Found word(s) list 
error in the Text body

Hi,

thanks for the fast reply!

On 04/22/11 21:39, Daevid Vincent wrote:
>> DROP DATABASE `test`;
>> CREATE DATABASE `test`;
>> USE `test`;
>>
>> CREATE TABLE `mytable`
>>     (`ID` SERIAL,
>>      `Type` INTEGER UNSIGNED NULL,
>>      PRIMARY KEY (`ID`));
>> INSERT INTO `mytable` (`Type`) VALUES (NULL);
>>
>> CREATE TABLE `types`
>>     (`ID` SERIAL,
>>      `Name` TEXT NOT NULL,
>>      PRIMARY KEY (`ID`));
>> INSERT INTO `types` (`Name`) VALUES ('Type A'), ('Type B');
>>
>> DELIMITER |
>> CREATE FUNCTION `EMPTY_STRING` (value TEXT)
>> RETURNS TEXT
>> DETERMINISTIC
>> BEGIN
>>     RETURN IF(value IS NULL, '', value);
>> END|
>> DELIMITER ;
>>
>> CREATE VIEW `myview` AS
>>     SELECT a.*, EMPTY_STRING(b.`Name`) AS `TypeName`
>>       FROM `mytable` a
>>         LEFT JOIN `types` b ON a.`Type` = b.`ID`;
>>
>> SELECT COUNT(*) FROM `myview` WHERE `TypeName` IS NULL;
>> SELECT COUNT(*) FROM `myview` WHERE `TypeName` IS NOT NULL;
>> SELECT COUNT(*) FROM `myview` WHERE `TypeName` LIKE '%';
>>
>> (I tried to simplify my problem as far as possible.)  When I run this
>> against MySQL 5.0.24a, I get three times "0" as output from the SELECTs
>> at the end -- shouldn't at least one of them match the single row?
>> (Preferably first and third ones.)
>>
>> What am I doing wrong here?  I have no clue what's going on...  Thanks a
>> lot!
>
> Try this maybe:
>
>   SELECT COUNT(*) FROM `myview` HAVING `TypeName` IS NULL;
>   SELECT COUNT(*) FROM `myview` HAVING `TypeName` IS NOT NULL;
>   SELECT COUNT(*) FROM `myview` HAVING `TypeName` LIKE '%';

When I try those, I get:

ERROR 1054 (42S22) at line 35: Unknown column 'TypeName' in 'having clause'

What would be the difference?  (I've never used HAVING before.)

Yours,
Daniel

-- 
http://www.pro-vegan.info/
--
Done:  Arc-Bar-Cav-Kni-Ran-Rog-Sam-Tou-Val-Wiz
To go: Hea-Mon-Pri

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=lmcg...@connx.com


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to