Некоторое время назад я спросил об изменении запроса MySQL на Postgresql .И, я думаю, я получил это, но теперь у меня есть другой запрос, который похож, поэтому я сделал то же самое, но я не уверен, работает ли он так, как задумано.Исходный запрос MySQL:
create temporary table IF NOT EXISTS temptable(id int(11) primary key, shared int(1) default 0)
ignore (SELECT 6 as id) UNION (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 (3,4,2));
My Postgresql (9.1) версия:
Create TEMP TABLE IF NOT EXISTS temptable(id int primary key, shared int default 0);
Insert into temptable SELECT x.id FROM ( SELECT user2role.userid AS id 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::%'
UNION (SELECT groupid FROM groups where groupid in (2,3,4))) x
LEFT JOIN temptable t USING (id) WHERE t.id IS NULL
Теперь меня больше всего беспокоит бит ignore (SELECT 6 as id) UNION
.Я не совсем понимаю смысл SELECT 6 как id.
Кроме того, это не имеет отношения к этому запросу, но у меня есть другой аналогичный запрос, который использует replace
вместо игнорирования.Я понимаю, что replace
очень похож на insert
, просто он заменяет старые значения, если они имеют одинаковый ключ.Я не мог придумать лучшего пути, поэтому я просто пошел дальше и использовал insert
, но стоит ли мне вместо этого реализовать его по-другому?
Спасибо за все, ребята.