小编Lui*_*uis的帖子

SELECT DISTINCT ON,按另一列排序

请考虑下表test

CREATE TABLE test(col1 int, col2 varchar, col3 date);
INSERT INTO test VALUES
  (1,'abc','2015-09-10')
, (1,'abc','2015-09-11')
, (2,'xyz','2015-09-12')
, (2,'xyz','2015-09-13')
, (3,'tcs','2015-01-15')
, (3,'tcs','2015-01-18');
Run Code Online (Sandbox Code Playgroud)
postgres=# select * from test;
  col1 | col2 |    col3    
 ------+------+------------
     1 | abc  | 2015-09-10
     1 | abc  | 2015-09-11
     2 | xyz  | 2015-09-12
     2 | xyz  | 2015-09-13
     3 | tcs  | 2015-01-15
     3 | tcs  | 2015-01-18
Run Code Online (Sandbox Code Playgroud)

我想要一个按日期 desc 排序的返回集合:

 col1 | col2 |    col3    
------+------+------------
    2 | xyz  | …
Run Code Online (Sandbox Code Playgroud)

postgresql order-by greatest-n-per-group distinct postgresql-9.6

8
推荐指数
2
解决办法
3867
查看次数

触发器内的两个插入语句 - 键“PRIMARY”的重复条目“521-2”

我正在尝试创建一个插入触发器,以便当新用户插入users表中时(通过站点、httpd 和 php),此信息的一部分会插入到另一个管理对 wiki 的访问的表中。

新wiki用户表注册的用户id和默认组id(2)也应该插入到另一个wiki表中,这样一个新用户就属于一个默认组。

我这样编码:

USE users_web;

DELIMITER |
CREATE TRIGGER doku_users_ins AFTER INSERT ON users_web.users
       FOR EACH ROW
       BEGIN
                INSERT INTO users_web.doku_users (login, pass, email)
                       VALUES (NEW.user, md5(NEW.pass), NEW.email);

                INSERT INTO users_web.doku_usergroup (uid, gid)
                       SELECT du.uid, "2" FROM doku_users du
                            INNER JOIN users_web.users u ON NEW.user = du.login;

       END |

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

如果触发器仅由第一条INSERT语句组成,它运行良好,因为 doku_users 表插入了一个更多的寄存器。

但是当我像上面那样创建触发器时,使用这两个INSERT语句,我收到一个错误作为反馈:Duplicate entry '521-2' for key 'PRIMARY'.

我猜第二个 sql 语句试图NEW在它以某种方式可用之前读取该值。

我该如何解决这个问题?

mysql trigger

3
推荐指数
1
解决办法
1万
查看次数