我只有一张桌子
cp_id | id | 价值 |
---|---|---|
112 | 5 | 好的 |
3369 | 112 | 好的 |
10 | 8 | 好的 |
3368 | 10 | 好的 |
如果我想要 id '5' 的信息(我只有一行),我正在苦苦挣扎
SELECT * FROM table WHERE id= '5'
但我也需要找出相关信息。 结果,我想要的:
cp_id | id | 价值 |
---|---|---|
112 | 5 | 好的 |
3369 | 112 | 好的 |
我尝试过:
SELECT *
FROM table
WHERE cp_id = (SELECT cp_id FROM table where id = 5)
UNION
SELECT *
FROM table
WHERE id = 5
但这不正确
您可以像这样使用横向交叉连接:
WITH -- S a m p l e D a t a :
tbl ( CP_ID, ID, VALUE ) AS
( Select 112, 5, 'ok' From Dual Union ALl
Select 3369, 112, 'ok' From Dual Union ALl
Select 20, 8, 'ok' From Dual Union ALl
Select 3368, 10, 'ok' From Dual
)
-- S Q L :
Select t.*
From
tbl t
Inner Join ( Select t.CP_ID, t1.CP_ID "CP_ID_2"
From tbl t
Cross Join Lateral ( Select * From tbl Where ID = t.CP_ID ) t1
) t1 ON( t.CP_ID IN(t1.CP_ID, t1.CP_ID_2) )
/* R e s u l t :
CP_ID ID VA
---------- ---------- --
112 5 ok
3369 112 ok */