我想将PostgreSQL转换为SQL Server。但是这个查询不起作用。从CTE中选择使用AS? SQL Server 2008
我在做什么错?我试图在WITH之前添加一个分号,但没有运气。
SELECT
member_a AS you, member_b AS mightknow, shared_connection,
CASE
WHEN (n1.member_job_country = n2.member_job_country AND n1.member_job_country = n3.member_job_country) THEN 'country in common'
WHEN (n1.member_unvan_id = n2.member_unvan_id AND n1.member_unvan_id = n3.member_unvan_id) THEN 'unvan in common'
ELSE 'nothing in common'
END AS reason
FROM (
WITH transitive_closure(member_a, member_b, distance, path_string, direct_connection) AS
(SELECT
member_a, member_b, 1 AS distance,
CAST(member_a as varchar(MAX)) + '.' + CAST(member_b as varchar(MAX)) + '.' AS path_string,
member_b AS direct_connection
FROM Member_Contact_Edges
WHERE member_a = 45046 -- set the starting node
UNION ALL
SELECT
tc.member_a, e.member_b, tc.distance + 1,
CAST(tc.path_string as varchar(MAX)) + CAST(e.member_b as varchar(MAX)) + '.' AS path_string,
tc.direct_connection
FROM Member_Contact_Edges AS e
JOIN transitive_closure AS tc ON e.member_a = tc.member_b
WHERE tc.path_string NOT LIKE '%' + CAST(e.member_b as varchar(MAX)) + '.%'
AND tc.distance < 2
)
SELECT
member_a, member_b,direct_connection AS shared_connection
FROM transitive_closure
WHERE distance = 2
) AS youmightknow
LEFT JOIN Members AS n1 ON youmightknow.member_a = n1.memberID
LEFT JOIN Members AS n2 ON youmightknow.member_b = n2.memberID
LEFT JOIN Members AS n3 ON youmightknow.shared_connection = n3.memberID
WHERE (n1.member_job_country = n2.member_job_country
AND n1.member_job_country = n3.member_job_country)
OR (n1.member_unvan_id = n2.member_unvan_id
AND n1.member_unvan_id = n3.member_unvan_id);
错误,我得到:
消息156,级别15,状态1,行 '与' 关键字11
附近有语法错误。
Msg 319,Level 15,State 1,Line 11
关键字'with'附近的语法不正确。如果此语句是 公用表表达式, xmlnamespaces子句或 跟踪上下文子句,则前面的 语句必须以 分号结尾。
Msg 102,Level 15,State 1,Line 34
')'附近的语法不正确。
这里是参考; Graphs in the Database - SQL Meets Social Networks - 看文章底部的facebook建议部分。
在此先感谢
谢谢@Martin现在像一个魅力工作和@迈克尔路德维希:谢谢你的参考,它帮助了我很多。 – 2011-05-01 22:16:33