我有以下表和数据: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