oracle中怎么查询一列必须等于多个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中怎么查询一列必须等于多个值相关的知识,希望对你有一定的参考价值。

该表有5个主键,通过其中一个主键必须等于(1,2,3)
不能多,也不能少 ,怎么查
换个问题:
名称 王 王 王 李 李 (主键)
职位 班长 数学委员 语文委员 班长 语文委员(主键)
班级 一班 一班 一班 二班 二班(主键)
当输入 (班长,数学委员,语文委员) 输出 : 王 一班
当输入(班长) 输出: null
当输入(班长,语文委员)输出:李 二班

查询一列等于多个值可用in或者or。

如test表中有如下内容:

要查询id为1,2,3的数据,可用如下语句:

select * from test where id in (1,2,3);

结果:

也可用or,语句如下:

select * from test where id=1 or id=2 or id=3;

结果如下:

参考技术A 一个表怎么会有5个主键呢

应该是5个字段的联合起来的唯一性吧追问

换个问题:
名称 王 王 王 李 李
职位 班长 数学委员 语文委员 班长 语文委员
当输入 (班长,数学委员,语文委员) 输出 : 王
当输入(班长) 输出: null
当输入(班长,语文委员)输出:李
  

追答

这不可能是oracle数据库表结构,
因为违反第一范式了。
请重新设计表数据结构再考虑怎么查询。

追问

改了,看上面

追答

表结构设计繁杂,非常不符合建表要求,建议多看ER关系模型
我目前看到的就已经有三个实体了:人员、职位、班级
并且人员和职位还是多对多关系,要拆分成1对多关系的。

至少需要四张表:人员表,职位表,班级表,人员职位关系表
你上面给出的更像是一个查询后的结果

建议多看数据库理论基础,搞清1对1,1对多,多对多的建表规范

参考技术B in (1,2,3)

oracle 表列值唯一 怎么实现

你这个情况,
可以采用
序列号
+
触发器
的方式来处理。
SQL>
CREATE
SEQUENCE
test_sequence2
2
increment
by
1
--
每次递增1
3
start
with
1
--
从1开始
4
nomaxvalue
--
没有最大值
5
minvalue
1
--
最小值=1
6
NOCYCLE;
--
不循环
Sequence
created.
SQL>
CREATE
TABLE
test_create_tab2
(
2
id
INT,
3
val
VARCHAR(10),
4
PRIMARY
KEY
(id)
5
);
Table
created.
SQL>
CREATE
OR
REPLACE
TRIGGER
BeforeTestCreate2Insert
2
BEFORE
INSERT
ON
test_create_tab2
3
FOR
EACH
ROW
4
BEGIN
5
SELECT
test_sequence2.nextval
INTO
:new.id
FROM
dual;
6
END;
7
/
Trigger
created.
SQL>
INSERT
INTO
test_create_tab2(val)
VALUES
('NO
id');
1
row
created.
SQL>
INSERT
INTO
test_create_tab2(id,
val)
VALUES
(1,
'id
no
use');
1
row
created.
SQL>
SELECT
*
FROM
test_create_tab2;
ID
VAL
----------
--------------------
1
NO
id
2
id
no
use
参考技术A select
count(1)
from
xxx
where
yyy
is
null;
首先
yyyy
是nullable这样做才有意义,
如果是nullable
那么最快的是
建一个索引
create
index
ind1
on
xxx(yyy,1);
如下面的例子:
sql>
set
timing
on;
sql>
sql>
select
count(1)
from
tvol
where
owner
is
null;
count(1)
----------
0
elapsed:
00:00:02.89
sql>
sql>
create
index
ind1
on
tvol(owner,1);
index
created.
elapsed:
00:00:20.73
sql>
select
count(1)
from
tvol
where
owner
is
null;
count(1)
----------
0
elapsed:
00:00:00.00

以上是关于oracle中怎么查询一列必须等于多个值的主要内容,如果未能解决你的问题,请参考以下文章

oracle 不等于1怎么查?

数据库中不等于条件怎么写

sql一列有多值查询,根据多个只查询我想要的数据

SQL查询不等于空白值如何写

oracle 查询不连续的值?

oracle怎么写IF语句?