我是SQL的全新手。我真的会帮助您解决这个问题,或者只是将正确的术语指向谷歌搜索。
我有一个这样的数据库:
A B
1 2
1 7
2 3
2 4
3 5
5 8
8 9
10 11
假设用户通知A的特定id。我需要构建一个查询,该查询按照我只能分三步思考的逻辑返回A列和B列。首先,返回A等于用户通知的id的所有记录。在此步骤中,收集所有B列值。之后,在第二步中,使用在第一步中收集的B列值返回列A等于已经提到的这些B值的所有记录。同样,在此步骤中,收集与第二步中返回的记录相关的所有B值。在第三步中,同样的事情,返回A列等于第二步中收集的B值的所有记录。
我知道我不够清楚。只是举个例子。
如果用户选择id = 1,则SQL返回:
A B
1 2
1 7
2 3
2 4
3 5
如果用户选择id = 2,则SQL返回:
A B
2 3
2 4
3 5
5 8
如果用户选择id = 3,则SQL返回:
A B
3 5
5 8
8 9
提前致谢!
答案 0 :(得分:1)
看起来很乱,但会起作用。
SELECT A,B FROM table
WHERE A in (1)
UNION
SELECT A,B FROM table
WHERE A in
(SELECT B FROM table
WHERE A in (1))
UNION
SELECT A,B FROM table
WHERE A in
(
SELECT B FROM table
WHERE A in
(SELECT B FROM table
WHERE A in (1))
)
在所有3个地方用用户选择的ID替换1
答案 1 :(得分:1)
我想你正在搜索这样的人:
SELECT *
FROM test_sql t1
where t1.a = 3
union
SELECT *
FROM test_sql t2
where t2.a in (
SELECT t1.b
FROM test_sql t1
where t1.a = 3
)
union
SELECT *
FROM test_sql t2
where t2.a in (
SELECT b
FROM test_sql t2
where t2.a in (
SELECT t1.b
FROM test_sql t1
where t1.a = 3
)
)
####我认为您的第二个输出错误