2011-07-25 16 views
1

このクエリは、mysqlでうまくいきますが、postgresqlで実行しようとしていて、というキーワードが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

前に行を削除した場合、その一時テーブルに行がどのように格納されますか?テーブルを削除して再作成し、1行(ここでsharedは値0とid = 1101を取得)でデータを設定します。これの背後にある意図は何ですか?私は一時テーブルが全く必要でないという気持ちがあります。 –

答えて

1

私は絶対に何かを明らかに不足していない限り、私は、一時テーブルの必要性が表示されません。

次はIGNORE何をするのか、正確に同じ結果(一時テーブルに関わるいくつかの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で動作するはずだと思う)

関連する問題