2

我一直在尝试将 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 经验的人),我不会感到惊讶。

任何帮助将不胜感激,谢谢!

4

0 回答 0