gpt4 book ai didi

对给定数据在同一个表上进行 SQL 查询 JOIN

转载 作者:行者123 更新时间:2023-12-04 21:23:29 24 4
gpt4 key购买 nike

我有以下表格和数据:

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 的公共(public)值相互关联(例如 999 的 COMMON_SEQ 与 Richmond 和 Marianne 相关)。

如何根据给定 ID 选择所有名称作为输入?

我尝试将表连接到自身(当 COMMON_SEQ 为空时工作正常)。此示例返回 Michelle 记录:

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

但它不会返回 ID 1004 的 2 条记录。此示例仅返回 Richmond 记录(但我还需要返回 Marianne 记录):

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 记录?

最佳答案

您可以使用:

SELECT *
FROM TEST_TABLE t
WHERE COMMON_SEQ IN (SELECT COMMON_SEQ
FROM TEST_TABLE t1
WHERE t1.ID = 1004)
OR t.ID = 1004;

<强> DBFiddle Demo

两次传递相同的参数来处理 COMMON_SEQ 中的 NULL

关于对给定数据在同一个表上进行 SQL 查询 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47485820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com