我需要从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个唯一值)。
使用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演示。(或带有字符串,来自注释)。
如果愿意,可以创建自己的架构级别的表集合类型,并可以这样做,或者使用内置的likeSYS.OCDINUMBERLIST
或SYS.ODCIVARCHAR2LIST
,这取决于您的实际数据类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句