标签: subquery

PostgreSQL - 使用子查询更新多个列值

我需要能够使用子查询的结果更新表上的多个列.一个简单的例子如下所示 -

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)

postgresql subquery

31
推荐指数
4
解决办法
5万
查看次数

如何在MySQL中对字段或列进行别名?

我正在尝试做这样的事情.但是我得到一个未知的列错误:

SELECT SUM(field1 + field2) AS col1, col1 + field3 AS col3 from core
Run Code Online (Sandbox Code Playgroud)

基本上,我想只使用别名,这样我就不需要执行先前执行的操作了.这可能在mysql中吗?

mysql alias subquery

30
推荐指数
4
解决办法
4万
查看次数

Postgres错误:用作表达式的子查询返回多行

我有两个独立的数据库.我试图将一个数据库中的列更新为另一个数据库中的列的值:

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)

这是我收到的错误:

ERROR:  more than one row returned by a subquery used as an expression
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

sql database postgresql dblink subquery

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

在聚合查询中计算具有特定条件的行

我有这个查询来获取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)

这是可能的,如果是这样,那么正确的语法是什么?

mysql sql count subquery aggregate-functions

29
推荐指数
2
解决办法
4万
查看次数

使用WHERE SELECT子查询错误的MYSQL更新

我有一个问题,让选择子查询工作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)

mysql select subquery

28
推荐指数
2
解决办法
6万
查看次数

PostgreSQL:在插入内部进行子选择

我有一张名为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.有没有人知道实现这样一个查询的正确方法?

sql postgresql insert subquery

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

T-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 t-sql sql-server join subquery

27
推荐指数
5
解决办法
10万
查看次数

哪个序列是SQL引擎执行的查询和子查询?

你好我做了一个SQL测试,对一个问题很怀疑/好奇:

哪个序列是SQL引擎执行的查询和子查询?

答案是

  1. 主查询 - >子查询 - >子子查询等
  2. 子子查询 - >子查询 - >素数查询
  3. 整个查询一次解释
  4. 没有固定的解释序列,查询解析器在飞行中做出决定

我选择了最后一个答案(假设它是最可靠的其他人).现在的好奇心:

我在哪里可以读到这一点,简要说明所有这些机制是什么?

谢谢.

sql subquery

27
推荐指数
2
解决办法
4万
查看次数

NSPredicate表达式中SUBQUERY的快速解释

似乎没有关于Apple的SUBQUERY关键字的文档,我在SO或Google上找不到关于它的简单解释.这是一个阴谋!;)

允许来自内圈的人请快速解释其语法,以便我可以使用它?

SUBQUERY(Bs, $x, $x IN %@)
Run Code Online (Sandbox Code Playgroud)

谢谢

iphone cocoa cocoa-touch subquery nspredicate

27
推荐指数
2
解决办法
2万
查看次数

MySQL#1093 - 您无法在FROM子句中为更新指定目标表'giveaways'

我试过了:

UPDATE giveaways SET winner = '1' WHERE ID = (SELECT MAX(ID) FROM giveaways)
Run Code Online (Sandbox Code Playgroud)

但它给出了:

#1093 - 您无法为update in FROM子句指定目标表'giveaways'

这篇文章看似相关,但我无法将其改编为我的查询.我怎样才能让它发挥作用?

mysql sql select subquery mysql-error-1093

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