首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个MySQL in子句中的负值有什么问题?

这个MySQL in子句中的负值有什么问题?
EN

Stack Overflow用户
提问于 2011-03-02 13:13:11
回答 2查看 214关注 0票数 1

我有一个这样的观点:

代码语言:javascript
复制
TABLE_TYPE
(code,name)
(1,'Computer')
(2,'Television')
(3,'Radio')

TABLE_THING
(code,name,type=TABLE_TYPE:code)
(-9999, 'ThingFirst',1)
(1,'Thing1',1)
(2,'Thing2',2)
(3,'Thing3',2)
(4,'Thing4',3)
(5,'Thing5',1)

VIEW_THINGS
(code,name,thingtype)
(-9999, 'ThingFirst','Computer')
(1,'Thing1','Computer')
(2,'Thing2','Television')
(3,'Thing3','Television')
(4,'Thing4','Radio')
(5,'Thing5','Computer')

查询:

代码语言:javascript
复制
select * from VIEW_THINGS where code in (-9999,1,2,3,4,5)

结果是:

代码语言:javascript
复制
(-9999, 'ThingFirst',NULL)

结果应该是:

代码语言:javascript
复制
(-9999, 'ThingFirst','Computer')
(1,'Thing1','Computer')
(2,'Thing2','Television')
(3,'Thing3','Television')
(4,'Thing4','Radio')
(5,'Thing5','Computer')

怎么了?

Tip1:当我退出IN子句中的负值(-9999)时,我得到的结果是:

代码语言:javascript
复制
(1,'Thing1','Computer')
(2,'Thing2','Television')
(3,'Thing3','Television')
(4,'Thing4','Radio')
(5,'Thing5','Computer')

Tip2:如果我从总视图结果中选择,我会得到正确的数据:

代码语言:javascript
复制
select * from (select * from VIEW_THINGS as T) where code in (-9999,1,2,3,4,5)

结果:

代码语言:javascript
复制
(-9999, 'ThingFirst','Computer')
(1,'Thing1','Computer')
(2,'Thing2','Television')
(3,'Thing3','Television')
(4,'Thing4','Radio')
(5,'Thing5','Computer')
EN

回答 2

Stack Overflow用户

发布于 2011-03-02 14:21:54

完整的测试脚本:

代码语言:javascript
复制
create table TABLE_TYPE(code int,name varchar(20));
insert table_type values
(1,'Computer'),
(2,'Television'),
(3,'Radio');

create table TABLE_THING(code int,name varchar(20),type int);
insert table_thing values
(-9999, 'ThingFirst',1),
(1,'Thing1',1),
(2,'Thing2',2),
(3,'Thing3',2),
(4,'Thing4',3),
(5,'Thing5',1);

create table VIEW_THINGS(code int, name varchar(20),thingtype varchar(20));
insert view_things values
(-9999, 'ThingFirst','Computer'),
(1,'Thing1','Computer'),
(2,'Thing2','Television'),
(3,'Thing3','Television'),
(4,'Thing4','Radio'),
(5,'Thing5','Computer');

select * from VIEW_THINGS where code in (-9999,1,2,3,4,5);

输出

代码语言:javascript
复制
"code";"name";"thingtype"
"-9999";"ThingFirst";"Computer"
"1";"Thing1";"Computer"
"2";"Thing2";"Television"
"3";"Thing3";"Television"
"4";"Thing4";"Radio"
"5";"Thing5";"Computer"

由于这是可行的,所以我敢打赌,VIEW_THINGS是一个连接两个表的视图。让我们看看

代码语言:javascript
复制
create view view_things2
as
select t.code, t.name, y.name thingtype
from table_thing t
inner join table_type y on y.code = t.type
;
select * from VIEW_THINGS2 where code in (-9999,1,2,3,4,5);

输出:如上所述

这是我们对您提供的信息所能做的最大努力。

票数 1
EN

Stack Overflow用户

发布于 2011-03-02 13:19:33

你有没有尝试过改变顺序,比如

代码语言:javascript
复制
SELECT * FROM VIEW_THINGS WHERE code IN (1,2,3,4,5,-9999)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5163641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档