私はOracle 11gを実行していますが、これはより一般的なSQLの質問です。SQL JOINが必要な結果を返さない
だから私は、次のテーブル/データを持っている -
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');
マイ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')
)
私はSQLがTEST_GROUP 'AAA' を返すようにしたいが、私はテストしていので、それはのように見えますどちらもPREFERENCE_ENTRY値ではありません。私がどちらか1つをテストすると、行は返されますしかし両方のPREFERENCE_ENTRYエントリが 'TRUE'であることをテストする必要があります。
あなたSQL達人から任意の助けが最も理解されるであろう...
私は、これは非常に簡単であると確信しているが、私はそれに苦しんでいます。
ありがとうございます。
gp.TYPE = 'CONFIGURABLE'とgp.TYPE = 'ENABLED'は真ではありませんすべて –