我有以下表和數據:SQL查詢在同一個表JOIN給定數據
CREATE TABLE TEST_TABLE (
ID NUMBER(6) NOT NULL,
COMMON_SEQ NUMBER(22),
NAME VARCHAR(20),
CONSTRAINT PK_CONST PRIMARY KEY (ID)
);
INSERT INTO TEST_TABLE (ID, COMMON_SEQ, NAME) VALUES (1001, NULL, 'Michelle');
INSERT INTO TEST_TABLE (ID, COMMON_SEQ, NAME) VALUES (1002, NULL, 'Tiberius');
INSERT INTO TEST_TABLE (ID, COMMON_SEQ, NAME) VALUES (1003, NULL, 'Marigold');
INSERT INTO TEST_TABLE (ID, COMMON_SEQ, NAME) VALUES (1004, 999, 'Richmond');
INSERT INTO TEST_TABLE (ID, COMMON_SEQ, NAME) VALUES (1005, 999, 'Marianne');
INSERT INTO TEST_TABLE (ID, COMMON_SEQ, NAME) VALUES (1006, NULL, 'Valentin');
INSERT INTO TEST_TABLE (ID, COMMON_SEQ, NAME) VALUES (1007, 888, 'Juliette');
INSERT INTO TEST_TABLE (ID, COMMON_SEQ, NAME) VALUES (1008, NULL, 'Lawrence');
在此表中的一些記錄被COMMON_SEQ的共同價值(與對方的例子COMMON_SEQ 999涉及里士滿和瑪麗安)。
如何根據給定ID作爲輸入選擇所有名稱?
我試着將表加入自己(當COMMON_SEQ爲空時工作正常)。此示例返回米歇爾記錄:
SELECT T.ID, T.COMMON_SEQ,T.NAME
FROM TEST_TABLE T
LEFT JOIN TEST_TABLE T2 ON NOT T.COMMON_SEQ is NULL
AND T.COMMON_SEQ=T2.COMMON_SEQ AND T.ID<>T2.ID
WHERE T.ID=1001
不過,這並不帶回2個記錄ID 1004這個例子只返回里士滿記錄(但我還需要返回瑪麗安記錄):
SELECT T.ID, T.COMMON_SEQ,T.NAME
FROM TEST_TABLE T
LEFT JOIN TEST_TABLE T2 ON NOT T.COMMON_SEQ is NULL
AND T.COMMON_SEQ=T2.COMMON_SEQ AND T.ID<>T2.ID
WHERE T.ID=1004
當我只提供一個ID值(1004或1005)時,如何改進/重寫查詢以返回Richmond和Marianne記錄?
因爲NULL = NULL是不正確的。 (你可以使用'x不是從y'離開,如果可用的話) – wildplasser
你使用哪個數據庫?甲骨文? – Ramesh
@Ramesh我使用2個數據庫:H2和Oracle。我需要適用於這兩者的通用SQL。 – user1697575