我一直在尝试将 SQL 查询(列出 ID 号为 1000 的人的朋友的朋友的名称)转换为关系代数,但运气不佳。查询如下:
CREATE TEMPORARY TABLE Temp1 AS (
SELECT * FROM (
SELECT ID2 AS ID FROM isFriend WHERE ID1 = 1000
UNION
SELECT ID1 AS ID FROM isFriend WHERE ID2 = 1000
) temp
);
CREATE TEMPORARY TABLE Temp2 AS (SELECT * FROM MyTable);
SELECT Name FROM People WHERE ID IN (
SELECT ID2 AS ID FROM isFriend WHERE ID1 IN (SELECT * FROM Temp1)
UNION
SELECT ID1 AS ID FROM isFriend WHERE ID2 IN (SELECT * FROM Temp2)
);
我做的第一件事是使用重命名操作创建临时表:
ρ(Temp1,∏ID1(σID2=1000(isFriend)) U (∏ID2(σID1=1000(isFriend)))
我不太确定在那之后对“SELECT Name ...”做什么,除了
∏Name(σID.....)
我将如何在 Select 操作中引用重命名的临时表“Temp1”,以及如何翻译“IN”关键字(WHERE ID1 IN ...)?
我对整个关系代数有点陌生,所以如果我完全忽略了一些非常明显的事情(对于那些有 RA 经验的人),我不会感到惊讶。
任何帮助将不胜感激,谢谢!