>Description:
i got wrong values from a select statement using a
         case value when .. then .. else .. end instruction
i made a select statement from this two tables
corriere

| Field | Type                | Null | Key | Default | Extra          |
+-------+---------------------+------+-----+---------+----------------+
| ID    | tinyint(3) unsigned |      | PRI | NULL    | auto_increment |
| sigla | char(20)            |      |     |         |                |

| id | sigla              |
+----+--------------------+
|  1 | Executive          |
|  2 | TNT Global Express |
|  3 | Borghi             |
|  4 | DHL                |

upacco
| Field         | Type                                      | Null | Key |
Default | Extra          |
+---------------+-------------------------------------------+------+-----+--
-------+----------------+
| id            | mediumint(8) unsigned                     |      | PRI |
NULL    | auto_increment |
| rif_ddt       | varchar(20)                               | YES  |     |
NULL    |                |
| qty           | smallint(5) unsigned                      |      |     | 0
|                |
| addr_shipp    | smallint(5) unsigned                      |      |     | 0
|                |
| awb           | varchar(20)                               | YES  |     |
NULL    |                |
| id_corriere   | tinyint(3) unsigned                       | YES  |     |
NULL    |                |
| pack_details  | varchar(20)                               | YES  |     |
NULL    |                |
| data_consegna | date                                      | YES  |     |
NULL    |                |
| status        | enum('APERTO','REC','SH-W','SH-C','SH-L') |      |     |
APERTO  |                |


| id | rif_ddt | qty | addr_shipp | awb      | id_corriere | pack_details |
data_consegna | status |
+----+---------+-----+------------+----------+-------------+--------------+-
--------------+--------+
| 12 | gf      |   0 |         29 | pacco 12 |           3 | asdf         |
2002-06-07    | APERTO |
| 16 | ddt8    |   1 |          9 | pacco 16 |           3 | asdf         |
2002-06-10    | SH-C   |
| 17 | NULL    |   3 |         24 | pacco 17 |           2 | xyz          |
NULL          | REC    |
| 18 | NULL    |   0 |         33 | pacco 18 |           3 | asdf         |
NULL          | APERTO |
| 19 | NULL    |   0 |          5 | NULL     |        NULL | NULL         |
NULL          | APERTO |
| 20 | NULL    |   4 |         24 | NULL     |        NULL | NULL         |
NULL          | REC    |
| 21 | NULL    |   1 |         50 | NULL     |        NULL | NULL         |
NULL          | APERTO |
| 22 | ddt8    |   4 |         23 | pacco 22 |           3 | pacco 22     |
2002-06-10    | SH-C   |
| 23 | NULL    |   0 |         24 | NULL     |        NULL | NULL         |
NULL          | APERTO |
| 24 | NULL    |   0 |         24 | NULL     |        NULL | NULL         |
NULL          | APERTO |

this select statement retrives wrong values in field status:
SELECT DISTINCT up.id as id,IFNULL(up.awb,'') as awb
,IF(up.id_corriere,c.sigla,'') as corriere
,IFNULL(up.pack_details,'') as pack_details
,up.data_consegna as data_consegna
,(CASE up.status
     WHEN 'REC' THEN 'CHIUSO'
     WHEN 'SH-W' THEN 'FERMO'
     WHEN 'SH-C' THEN 'SPEDITO'
     WHEN 'SH-L' THEN 'SPEDITO'
     ELSE up.status END) as status
FROM upacco up, corriere c
WHERE (c.id = up.id_corriere or up.id_corriere IS NULL)
AND (up.rif_ddt='ddt8' OR up.rif_ddt IS NULL)
ORDER BY up.rif_ddt,up.id;

| id | awb      | corriere           | pack_details | data_consegna | status
| expected value is
+----+----------+--------------------+--------------+---------------+-------
-+
| 17 | pacco 17 | TNT Global Express | xyz          | NULL          | APERTO
|  <- CHIUSO
| 18 | pacco 18 | Borghi             | asdf         | NULL          | APERTO
|
| 19 |          |                    |              | NULL          | APERTO
|
| 20 |          |                    |              | NULL          | APERTO
|  <- CHIUSO
| 21 |          |                    |              | NULL          | APERTO
|
| 23 |          |                    |              | NULL          | APERTO
|
| 24 |          |                    |              | NULL          | APERTO
|
| 16 | pacco 16 | Borghi             | asdf         | 2002-06-10    | APERTO
|  <- SPEDITO
| 22 | pacco 22 | Borghi             | pacco 22     | 2002-06-10    | APERTO
|  <- SPEDITO

her i removed the case statement to se what is the real value an it's ok
SELECT DISTINCT up.id as id,IFNULL(up.awb,'') as awb
,IF(up.id_corriere,c.sigla,'') as corriere
,IFNULL(up.pack_details,'') as pack_details
,up.data_consegna as data_consegna
,up.status as status
FROM upacco up, corriere c
WHERE (c.id = up.id_corriere or up.id_corriere IS NULL)
AND (up.rif_ddt='ddt8' OR up.rif_ddt IS NULL)
ORDER BY up.rif_ddt,up.id;

| id | awb      | corriere           | pack_details | data_consegna | status
|
+----+----------+--------------------+--------------+---------------+-------
-+
| 17 | pacco 17 | TNT Global Express | xyz          | NULL          | REC
|
| 18 | pacco 18 | Borghi             | asdf         | NULL          | APERTO
|
| 19 |          |                    |              | NULL          | APERTO
|
| 20 |          |                    |              | NULL          | REC
|
| 21 |          |                    |              | NULL          | APERTO
|
| 23 |          |                    |              | NULL          | APERTO
|
| 24 |          |                    |              | NULL          | APERTO
|
| 16 | pacco 16 | Borghi             | asdf         | 2002-06-10    | SH-C
|
| 22 | pacco 22 | Borghi             | pacco 22     | 2002-06-10    | SH-C
|

i use also other statements with to tables and exactly the same case
instruction
and it works well for example

SELECT up.id as 'N°Pacco'
,IFNULL(up.rif_ddt,'') as rif_ddt
,(CASE up.status
     WHEN 'REC' THEN 'CHIUSO'
     WHEN 'SH-W' THEN 'FERMO'
     WHEN 'SH-C' THEN 'SPEDITO'
     WHEN 'SH-L' THEN 'SPEDITO'
     ELSE up.status END) as status
,ind.nome as Destinazione
FROM upacco up, indirizzi ind
WHERE up.status in ('REC','SH-W','SH-C','SH-L')
AND ind.id = up.addr_shipp
AND (up.rif_ddt='ddt8' OR up.rif_ddt IS NULL)
ORDER BY up.rif_ddt,up.id;

| N°Pacco | rif_ddt | status  | Destinazione |
+---------+---------+---------+--------------+
|      17 |         | CHIUSO  | ALPITEL      |
|      20 |         | CHIUSO  | ALPITEL      |
|      16 | ddt8    | SPEDITO | WIND         |
|      22 | ddt8    | SPEDITO | SIRTI MI     |


table indirizzi is made like this

| Field        | Type                  | Null | Key | Default | Extra
|
+--------------+-----------------------+------+-----+---------+-------------
---+
| id           | mediumint(8) unsigned |      | PRI | NULL    |
auto_increment |
| nome         | varchar(50)           |      |     |         |
|
>How-To-Repeat:
CREATE TABLE upacco (
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
rif_ddt CHAR(20) NULL,
qty SMALLINT UNSIGNED NOT NULL,
addr_shipp SMALLINT UNSIGNED NOT NULL,
awb VARCHAR(15) NULL,
id_corriere TINYINT UNSIGNED NULL,
pack_details VARCHAR(20) NULL,
data_consegna DATE NULL,
status enum('APERTO','REC','SH-W','SH-C','SH-L') NOT NULL,
PRIMARY KEY (id) );
INSERT INTO upacco
VALUES
(12,'gf',0,29,'pacco 12',3,'asdf','2002-06-07','APERTO')
,(16,'ddt8',1, 9,'pacco 16',3,'asdf','2002-06-10','SH-C')
,(17,NULL,3,24,'pacco 17',2,'xyz','NULL','REC')
,(18,NULL,0,33,'pacco 18',3,'asdf','NULL','APERTO')
,(19,NULL,0,5,NULL,NULL,NULL,NULL,'APERTO')
,(20,NULL,4,24,NULL,NULL,NULL,NULL,'REC')
,(21,NULL,1,50,NULL,NULL,NULL,NULL,'APERTO')
,(22,'ddt8',4,23,'pacco 22',3,'pacco 22','2002-06-10','SH-C')
,(23,NULL,0,24,NULL,NULL,NULL,NULL,'APERTO')
,(24,NULL,0,24,NULL,NULL,NULL,NULL,'APERTO');

CREATE TABLE corriere (
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
sigla CHAR(20) NOT NULL,
PRIMARY KEY (id) );

INSERT INTO corriere
VALUES
(1,'Executive')
,(2,'TNT Global Express')
,(3,'Borghi')
,(4,'DHL');

SELECT DISTINCT up.id as id,IFNULL(up.awb,'') as awb
,IF(up.id_corriere,c.sigla,'') as corriere
,IFNULL(up.pack_details,'') as pack_details
,up.data_consegna as data_consegna
,(CASE up.status
     WHEN 'REC' THEN 'CHIUSO'
     WHEN 'SH-W' THEN 'FERMO'
     WHEN 'SH-C' THEN 'SPEDITO'
     WHEN 'SH-L' THEN 'SPEDITO'
     ELSE up.status END) as status
FROM upacco up, corriere c
WHERE (c.id = up.id_corriere or up.id_corriere IS NULL)
AND (up.rif_ddt='ddt8' OR up.rif_ddt IS NULL)
ORDER BY up.rif_ddt,up.id;

SELECT DISTINCT up.id as id,IFNULL(up.awb,'') as awb
,IF(up.id_corriere,c.sigla,'') as corriere
,IFNULL(up.pack_details,'') as pack_details
,up.data_consegna as data_consegna
,up.status as status
FROM upacco up, corriere c
WHERE (c.id = up.id_corriere or up.id_corriere IS NULL)
AND (up.rif_ddt='ddt8' OR up.rif_ddt IS NULL)
ORDER BY up.rif_ddt,up.id;
>Originator:    Ulrich schmid
>Organization:  Videoelettronic S.P.A Italy
>mySQL supporT: none
>Severity:      non-critical
>Priority:      medium
>Category:      mysql
>Class:         sw-Bug
>Release:       mysql-3.23.32 (Source distribution)
System: Linux linuxgw 2.2.17-21mdksecure #1 SMP Thu Oct 5 12:52:38 CEST 2000
i686 unknown
Architecture: i686

Some paths:  /usr/bin/perl /usr/bin/make /usr/bin/gmake /usr/bin/gcc
/usr/bin/cc
GCC: Reading specs from /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/specs
gcc version 2.95.3 19991030 (prerelease)
Compilation info: CC='gcc'  CFLAGS=''  CXX='c++'  CXXFLAGS=''  LDFLAGS=''

Configure command: ./configure  --prefix=/usr/local/mysql


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to