我需要能够使用子查询的结果更新表上的多个列.一个简单的例子如下所示 -
UPDATE table1
SET (col1, col2) =
((SELECT MIN (ship_charge), MAX (ship_charge) FROM orders))
WHERE col4 = 1001;
Run Code Online (Sandbox Code Playgroud)
我怎么能在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)
Run Code Online (Sandbox Code Playgroud) 我正在尝试做这样的事情.但是我得到一个未知的列错误:
SELECT SUM(field1 + field2) AS col1, col1 + field3 AS col3 from core
Run Code Online (Sandbox Code Playgroud)
基本上,我想只使用别名,这样我就不需要执行先前执行的操作了.这可能在mysql中吗?
我有两个独立的数据库.我试图将一个数据库中的列更新为另一个数据库中的列的值:
UPDATE customer
SET customer_id=
(SELECT t1 FROM dblink('port=5432, dbname=SERVER1 user=postgres password=309245',
'SELECT store_key FROM store') AS (t1 integer));
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
Run Code Online (Sandbox Code Playgroud)ERROR: more than one row returned by a subquery used as an expression
有任何想法吗?
我有这个查询来获取PlayerSessions 的数量reconnect = TRUE,分组依据Player.country:
SELECT
country,
COUNT(*) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
WHERE reconnect = TRUE
GROUP BY country
Run Code Online (Sandbox Code Playgroud)
我想修改它不仅显示重新连接的会话计数,还显示总计数,例如:
SELECT
country,
COUNT(*) AS total,
(COUNT WHERE reconnect = TRUE) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
GROUP BY country
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是这样,那么正确的语法是什么?
我有一个问题,让选择子查询工作UPDATE.我正在尝试以下内容:
UPDATE foo
SET bar=bar-1
WHERE baz=
(
SELECT baz
FROM foo
WHERE fooID='1'
)
Run Code Online (Sandbox Code Playgroud)
foo具有主键的表名称在哪里fooID.bar并且baz是INT类型.执行此操作时,我收到以下错误:
Error: A query failed. You can't specify target table 'foo' for update
in FROM clause
Run Code Online (Sandbox Code Playgroud) 我有一张名为map_tags:
map_id | map_license | map_desc
Run Code Online (Sandbox Code Playgroud)
另一个table(widgets),其记录包含对记录的外键引用(1到1)map_tags:
widget_id | map_id | widget_name
Run Code Online (Sandbox Code Playgroud)
鉴于所有map_licenses都是唯一的约束(但是没有设置为键map_tags),那么如果我有a map_license和a widget_name,我想widgets在同一个SQL语句的所有内部执行插入:
INSERT INTO
widgets w
(
map_id,
widget_name
)
VALUES (
(
SELECT
mt.map_id
FROM
map_tags mt
WHERE
// This should work and return a single record because map_license is unique
mt.map_license = '12345'
),
'Bupo'
)
Run Code Online (Sandbox Code Playgroud)
我相信我走在正确的轨道上但是马上知道这对于Postgres来说这是不正确的SQL.有没有人知道实现这样一个查询的正确方法?
我正在尝试连接多个表,但其中一个表有一个具有不同日期的partid的多个记录.我希望得到最近日期的记录.
以下是一些示例表:
Table: MyParts
Partid Partnumber Description
1 ABC-123 Pipe
2 ABC-124 Handle
3 ABC-125 Light
Table: MyPrices
Partid Price PriceDate
1 $1 1/1/2005
1 $2 1/1/2007
1 $3 1/1/2009
2 $2 1/1/2005
2 $4 1/1/2006
2 $5 1/1/2008
3 $10 1/1/2008
3 $12 1/1/2009
Run Code Online (Sandbox Code Playgroud)
如果我只是想找到某个部分的最新价格,我可以做:
SELECT * FROM MyPrice WHERE PriceDate = (SELECT MAX(PriceDate)
FROM MyPrice WHERE Partid = 1)
Run Code Online (Sandbox Code Playgroud)
但是我想首先加入,然后为所有部分而不是一个部分找回正确的价格.这是我尝试过的:
SELECT * FROM MyParts LEFT JOIN MyPrice ON MyParts.Partid = MyPrice.Partid WHERE
MyPart.PriceDate = (SELECT MAX(PriceDate) FROM MyPrice) …Run Code Online (Sandbox Code Playgroud) 你好我做了一个SQL测试,对一个问题很怀疑/好奇:
哪个序列是SQL引擎执行的查询和子查询?
答案是
我选择了最后一个答案(假设它是最可靠的其他人).现在的好奇心:
我在哪里可以读到这一点,简要说明所有这些机制是什么?
谢谢.
似乎没有关于Apple的SUBQUERY关键字的文档,我在SO或Google上找不到关于它的简单解释.这是一个阴谋!;)
请允许来自内圈的人请快速解释其语法,以便我可以使用它?
SUBQUERY(Bs, $x, $x IN %@)
Run Code Online (Sandbox Code Playgroud)
谢谢
我试过了:
UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Run Code Online (Sandbox Code Playgroud)
但它给出了:
#1093 - 您无法为update in
FROM子句指定目标表'giveaways'
这篇文章看似相关,但我无法将其改编为我的查询.我怎样才能让它发挥作用?
subquery ×10
sql ×6
mysql ×4
postgresql ×3
select ×2
alias ×1
cocoa ×1
cocoa-touch ×1
count ×1
database ×1
dblink ×1
insert ×1
iphone ×1
join ×1
nspredicate ×1
sql-server ×1
t-sql ×1