SQL - 分三步进行选择

时间:2018-04-24 17:51:10

标签: sql

我是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

提前致谢!

2 个答案:

答案 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
  )
)

####我认为您的第二个输出错误