我要求从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个唯一值)。
答案 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.OCDINUMBERLIST
或SYS.ODCIVARCHAR2LIST
,具体取决于您的实际数据类型。
答案 2 :(得分:0)
我认为你的PERSON_ID是一个数字
您只需要一个标准
select * from PEOPLE_TABLE
where PERSON_ID = 1