使用重复值进行oracle搜索 - 如何返回重复结果

时间:2015-02-19 11:43:49

标签: sql oracle

我要求从SELECT语句返回值,无论它们是否重复。

示例:

SELECT * FROM PEOPLE_TABLE
WHERE PERSON_ID = 1
AND PERSON_ID = 1;

显然只返回一条记录,例如

(person_id, name) 
       "1", "Henry"

我希望我的结果返回

"1", "Henry"
"1", "Henry"

实现这一目标的最佳方法是什么?我的实际连接几个表并使用WHERE IN然后指定大约600个值(200个唯一值)。

3 个答案:

答案 0 :(得分:1)

要重复结果,请使用UNION ALL:

SELECT * FROM PEOPLE_TABLE
WHERE PERSON_ID = 1
UNION ALL
SELECT * FROM PEOPLE_TABLE
WHERE PERSON_ID = 1

实际上,我认为你要求其他东西,但我无法弄清楚是什么。

答案 1 :(得分:1)

使用WHERE IN将禁止重复。如果您正在做这样的事情:

CREATE TABLE PEOPLE_TABLE (PERSON_ID NUMBER, NAME VARCHAR2(10));
INSERT INTO PEOPLE_TABLE VALUES (1, 'Henry');
INSERT INTO PEOPLE_TABLE VALUES (2, 'George');
INSERT INTO PEOPLE_TABLE VALUES (3, 'Jane');

SELECT PERSON_ID, NAME
FROM PEOPLE_TABLE
WHERE PERSON_ID IN (1, 1, 3);

 PERSON_ID NAME      
---------- ----------
         1 Henry      
         3 Jane       

然后,您可以针对包含相同目标值的表集合加入:

SELECT PT.PERSON_ID, PT.NAME
FROM TABLE(SYS.ODCINUMBERLIST(1, 1, 3)) T
JOIN PEOPLE_TABLE PT
ON PT.PERSON_ID = T.COLUMN_VALUE;

 PERSON_ID NAME      
---------- ----------
         1 Henry      
         1 Henry      
         3 Jane       

SQL Fiddle demo。 (或with strings,来自评论)。

如果您愿意并有权限,可以创建自己的架构级表集合类型,或者使用a built-in one like SYS.OCDINUMBERLISTSYS.ODCIVARCHAR2LIST,具体取决于您的实际数据类型。

答案 2 :(得分:0)

我认为你的PERSON_ID是一个数字

您只需要一个标准

select * from PEOPLE_TABLE
where PERSON_ID = 1

http://sqlfiddle.com/#!15/3ff40/5