I'm running Oracle 11g but this is a more general SQL question.
So I have the following tables/data -
CREATE TABLE TEST_GROUP ( ID VARCHAR2(20), CONSTRAINT test_group_pk PRIMARY KEY (ID) ); INSERT INTO TEST_GROUP VALUES ('AAA'); CREATE TABLE GROUP_PREFERENCE ( GROUP_ID VARCHAR2(20), ID VARCHAR2(20), TYPE VARCHAR2(20), CONSTRAINT GROUP_PREF_PK PRIMARY KEY (GROUP_ID, ID, TYPE) ); INSERT INTO GROUP_PREFERENCE VALUES ('AAA', 'AAA-P1', 'CONFIGURABLE'); INSERT INTO GROUP_PREFERENCE VALUES ('AAA', 'AAA-P2', 'ENABLED'); CREATE TABLE PREFERENCE_ENTRY ( PREFERENCE_ID VARCHAR2(20), PREFERENCE_VALUE VARCHAR2(20), CONSTRAINT PREF_PK PRIMARY KEY (PREFERENCE_ID, PREFERENCE_VALUE) ); INSERT INTO PREFERENCE_ENTRY VALUES ('AAA-P1', 'TRUE'); INSERT INTO PREFERENCE_ENTRY VALUES ('AAA-P2', 'TRUE'); My SQL -
SELECT g.ID FROM TEST_GROUP g JOIN GROUP_PREFERENCE gp ON g.ID = gp.GROUP_ID JOIN PREFERENCE_ENTRY pe ON gp.ID = pe.PREFERENCE_ID WHERE ( (gp.TYPE = 'CONFIGURABLE' AND pe.PREFERENCE_VALUE = 'TRUE') AND (gp.TYPE = 'ENABLED' AND pe.PREFERENCE_VALUE = 'TRUE') ) I want the SQL to return the TEST_GROUP 'AAA' but it looks like because I am testing for both PREFERENCE_ENTRY values it doesn't. If I test for either one on it's own it does return the row but I need to test that both PREFERENCE_ENTRY entries are 'TRUE'.
I'm sure this is quite simple but I'm struggling with it...
Any help from you SQL gurus will be most appreciated.
Thanks in advance.