2011-07-25 176 views
1

该查询在mysql中很好用,但我试图在postgresql中运行它,它抱怨IGNORE关键字不是pg关键字。我不知道如何修改它以使其在pg下执行相同的操作?将mysql查询转换为postgresql

DROP TABLE IF EXISTS ct_tmp_u1101_t9; 
CREATE TEMPORARY TABLE ct_tmp_u1101_t9(id int primary key, shared int default 0) IGNORE (SELECT 1101 as id); 
SELECT shared from ct_tmp_u1101_t9 
UNION (SELECT cust_user2role.userid AS userid FROM cust_user2role 
INNER JOIN cust_users ON cust_users.id = cust_user2role.userid 
INNER JOIN cust_role ON cust_role.roleid = cust_user2role.roleid 
WHERE cust_role.parentrole like 'H1::H2::H3::H4::H5::%') 
UNION (SELECT groupid FROM cust_groups where groupid in (3,4,2,1005)); 
+0

什么是忽略请勿在MySQL中? –

+0

IGNORE关键字告诉MySQL放弃所有重复记录而不会产生错误 – asdbabil

+0

如果您之前放弃了该行,该临时表如何包含行?您删除表,重新创建它并使用单行填充(其中共享获取值0和id = 1101)。这背后的意图是什么?我有这样的感觉,临时表根本就没有必要。 –

回答

1

除非我遗漏了一些绝对明显的东西,我看不到需要临时表。

下应返回完全相同的结果(除非有一些MySQL的魔法参与临时表)

SELECT 0 as shared 
UNION 
SELECT cust_user2role.userid AS userid 
FROM cust_user2role 
    INNER JOIN cust_users ON cust_users.id = cust_user2role.userid 
    INNER JOIN cust_role ON cust_role.roleid = cust_user2role.roleid 
    WHERE cust_role.parentrole like 'H1::H2::H3::H4::H5::%' 
UNION 
SELECT groupid 
FROM cust_groups 
WHERE groupid IN (3,4,2,1005); 

(和我想的一样应该使用MySQL)