Table
-------------------------------------------------- | Col1 | Col2 | -------------------------------------------------- | A | 1 | -------------------------------------------------- | A | 2 | -------------------------------------------------- | A | 3 | -------------------------------------------------- | B | 3 | -------------------------------------------------- | B | 4 | -------------------------------------------------- | B | 5 | -------------------------------------------------- | C | 4 | -------------------------------------------------- | C | 6 | -------------------------------------------------- | C | 3 | --------------------------------------------------
how to select distinct col1 that has 3 and 4 (answer is B, C)
Thanks in advance
You can use two IN
clauses (or EXISTS
):
SELECT DISTINCT col1
FROM Table
WHERE
COL1 IN (SELECT Col1 FROM Table WHERE Col2 = 3)
AND
COL1 IN (SELECT Col1 FROM Table WHERE Col2 = 4)
Or this GROUP BY
SELECT Col1 FROM Table
WHERE Col2 IN (3,4)
GROUP BY Col1
HAVNG COUNT(DISTINCT Col2) = 2
Oracle 11g R2 Schema Setup :
CREATE TABLE tbl (Col1, Col2 ) AS
SELECT 'A', 1 FROM DUAL
UNION ALL SELECT 'A', 2 FROM DUAL
UNION ALL SELECT 'A', 3 FROM DUAL
UNION ALL SELECT 'B', 3 FROM DUAL
UNION ALL SELECT 'B', 4 FROM DUAL
UNION ALL SELECT 'B', 5 FROM DUAL
UNION ALL SELECT 'C', 4 FROM DUAL
UNION ALL SELECT 'C', 6 FROM DUAL
UNION ALL SELECT 'C', 3 FROM DUAL;
CREATE OR REPLACE TYPE NUMBERs_Table AS TABLE OF NUMBER(1);
Query 1 :
SELECT Col1
FROM tbl
GROUP BY Col1
HAVING NUMBERs_Table(3,4) SUBMULTISET OF CAST( COLLECT( Col2 ) AS NUMBERs_Table )
Results :
| COL1 |
|------|
| B |
| C |
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.