我需要能够使用子查询的结果更新表上的多个列.一个简单的例子如下所示 -
UPDATE table1
SET (col1, col2) =
  ((SELECT MIN (ship_charge), MAX (ship_charge) FROM orders))
WHERE col4 = 1001; 
我怎么能在PostgreSQL中做到这一点?
谢谢你的任何提示!
更新:我为使样本对我的实际用例过于简单而道歉.以下查询更准确 -
UPDATE table1
SET    (TOTAL_MIN_RATE, TOTAL_MAX_RATE) = (SELECT AVG(o.MIN_RATE), AVG(o.MAX_RATE)
                           FROM   ORDR o INNER JOIN table2 ba ON (o.PAY_ACCT_ID = ba.ACCT_ID) 
                                         INNER JOIN table3 mb ON (ba.BANK_ID = mb.BANK_ID)
                               WHERE  ba.CNTRY_ID = table1.CNTRY_ID AND 
                                              o.STUS_CD IN ('01','02','03','04','05','06') AND
                                  ((o.FRO_CRNCY_ID = table1.TO_CRNCY_ID AND o.TO_CRNCY_ID = table1.FRO_CRNCY_ID) OR
                                   (o.TO_CRNCY_ID = table1.TO_CRNCY_ID AND o.FRO_CRNCY_ID = table1.FRO_CRNCY_ID))   
                               GROUP BY ba.CNTRY_ID)
我真的需要这样做:
UPDATE table t1 
SET column1=t2.column1 
FROM table t2 
INNER JOIN table t3 
USING (column2) 
GROUP BY t1.column2;
但postgres说我有关于GROUP BY子句的语法错误.有什么不同的方法呢?
我正在尝试更新Django数据库中的用户.
提取的数据如下:
fetched_data = {
     'id': 1,
     'first_name': 'John',
     'last_name': 'Doe',
     'phone': '+32 12',
     'mobile_phone': '+32 13',
     'email': 'myemail@hotmail.com',
     'username': 'myusername'
}
我得到这个id的用户如下:
old_user = User.objects.get(pk=fetched_data['id'])
如果我按如下方式更新用户:
old_user.username = fetched_data['username']
old_user.first_name = fetched_data['first_name']
......
old_user.save()
它工作正常,但我不想为每条记录都这样做,因此我尝试了类似的东西:
for fetched_data_key in fetched_data:
    old_user.fetched_data_key = fetched_data['fetched_data_key']
    //old_user[fetched_data_key] = fetched_data['fetched_data_key'] --- I tried this way to
    old_user.save()
但这不起作用.任何想法如何更新用户而不为每条记录做这件事?
在将记录合并为一个时,删除重复项的最佳方法是什么?
我有一种情况,表跟踪播放器名称和他们的记录,如下所示:
stats
-------------------------------
nick     totalgames     wins   ...
John     100            40
john     200            97
Whistle  50             47
wHiStLe  75             72
...
我需要合并缺口重复的行(当忽略大小写时)并将记录合并为一个,如下所示:
    stats
    -------------------------------
    nick     totalgames     wins   ...
    john     300            137
    whistle  125            119
    ...
我在Postgres做这个.最好的方法是什么?
我知道通过这样做,我可以获得存在重复项的名称:
select lower(nick) as nick, totalgames, count(*) 
from stats 
group by lower(nick), totalgames
having count(*) > 1;
我想到了这样的事情:
update stats
set totalgames = totalgames + s.totalgames
from (that query up there) s
where lower(nick) = s.nick
除此之外不能正常工作.我似乎仍然无法删除包含重复名称的其他重复行.我能做什么?有什么建议?
我正在使用Postgres 9.3构建一个数据库作为后端,有3个表:
table1 (user_id, username, name, surname, emp_date)
table2 (pass_id, user_id, password)
table3 (user_dt_id, user_id, adress, city, phone)
可以看出table2并且table3是儿童表table1.
我可以user_id在table1(父)中提取新插入的行:
INSERT INTO "table1" (default,'johnee','john','smith',default) RETURNING userid;
我需要将新提取的id(from table1)插入到这些表的唯一user_id列中table2以及table3其他数据中.基本上3 X INSERT ...... 
我该怎么做?