我有這個疑問:轉換MySQL查詢到PostgreSQL的
DROP TABLE IF EXISTS tmp_table;
CREATE TEMPORARY TABLE tmp_table(id int primary key)
IGNORE (
SELECT user2role.userid AS userid
FROM user2role
INNER JOIN users ON users.id=user2role.userid
INNER JOIN role ON role.roleid=user2role.roleid
WHERE role.parentrole like 'H1::H2::H3::H4::H5::%')
UNION (
SELECT groupid
FROM groups
WHERE groupid IN (2,3,4));
該查詢原文爲MySQL和替代DROP TABLE IF EXISTS
它使用IF NOT EXISTS
。我改變了那部分,但我不知道該怎麼辦IGNORE
。
首先,IGNORE
在做什麼?
我試過尋找PostgreSQL等價物,但它們似乎都涉及複雜的過程。我必須爲此編寫一個程序嗎?如果我必須寫一個,它會是什麼樣子?我可以用一些PHP代碼來模擬IGNORE
嗎? (SQL查詢是由PHP生成的。)
哦,所以下面忽略的東西只是插入到新的臨時表中?那麼爲什麼使用忽略而不是插入? – zermy
我不得不猜測。它可能在mySQL中很有用,但在postgres中不需要(也不存在)。關鍵字'IGNORE'的副作用就像處理重複鍵錯誤一樣只是警告。但這不會發生在這裏,因爲每個定義的「UNION」消除了重複。 –
非常感謝,2個簡單的問題,你爲什麼要將int更改爲int4,並將Inner JOIN更改爲JOIN(是因爲Join默認爲Inner,所以沒關係?)? – zermy