标签: subquery

Postgresql - 使用带有alter sequence表达式的子查询

我的问题很简单.

是否可以在PostgreSQL中的alter表达式中使用子查询?

我想根据主键列值更改序列值.

我尝试使用以下表达式,但它不会执行.

alter sequence public.sequenceX restart with(从表中选择max(table_id)+1)

提前致谢

sql postgresql subquery sequence alter

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

仅使用SQL返回pre-UPDATE列值 - PostgreSQL版本

我有一个相关的问题,但这是我的谜题的另一部分.

我想从UPDATEd的行中获取列的OLD VALUE - 不使用触发器(也不使用存储过程,也不使用任何其他额外的非SQL /查询实体).

我的查询是这样的:

   UPDATE my_table
      SET processing_by = our_id_info -- unique to this worker
    WHERE trans_nbr IN (
                        SELECT trans_nbr
                          FROM my_table
                         GROUP BY trans_nbr
                        HAVING COUNT(trans_nbr) > 1
                         LIMIT our_limit_to_have_single_process_grab
                       )
RETURNING row_id;
Run Code Online (Sandbox Code Playgroud)

如果我可以在子查询结束时执行"FOR UPDATE ON my_table",那将是devine(并修复我的其他问题/问题).但是,这不起作用:不能有这个AND"GROUP BY"(这对于计算trans_nbr的COUNT是必要的).然后我可以直接使用那些trans_nbr并进行查询以获得(即将成为)之前的processing_by值.

我尝试过这样做:

   UPDATE my_table
      SET processing_by = our_id_info -- unique to this worker
     FROM my_table old_my_table
     JOIN (
             SELECT trans_nbr
               FROM my_table
           GROUP BY trans_nbr
             HAVING COUNT(trans_nbr) > 1
              LIMIT our_limit_to_have_single_process_grab
          ) sub_my_table
       ON old_my_table.trans_nbr = sub_my_table.trans_nbr …
Run Code Online (Sandbox Code Playgroud)

sql postgresql subquery sql-update

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

在列中查找重复条目

我正在编写此查询以查找table1中的重复CTN记录.所以我的想法是,如果CTN_NO出现超过两次或更高,我希望它在我的SELECT*语句输出中显示在顶部.

我尝试了以下子查询逻辑,但我需要拉动

  SELECT *
         table1 
   WHERE S_IND='Y'
     and CTN_NO = (select CTN_NO 
                     from table1 
                    where S_IND='Y' 
                      and count(CTN_NO) < 2);
order by 2
Run Code Online (Sandbox Code Playgroud)

sql oracle subquery

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

如何使用NHibernate QueryOver重新创建这个复杂的SQL查询?

想象一下以下(简化)数据库布局: 数据库布局

我们有许多"假期"记录,涉及在特定日期前往特定住宿等.

我想从数据库中提取每个住宿的"最佳"假期(即最低价格),给定一组搜索标准(例如持续时间,出发机场等).

将有多个具有相同价格的记录,因此我们需要选择保存(降序),然后按出发日期升序.

我可以写SQL来做这个看起来像这样(我不是说这必然是最优化的方式):

SELECT *
FROM Holiday h1 INNER JOIN (

    SELECT  h2.HolidayID,
        h2.AccommodationID,
        ROW_NUMBER() OVER (
            PARTITION BY h2.AccommodationID
            ORDER BY OfferSaving DESC
        ) AS RowNum
    FROM Holiday h2 INNER JOIN (

        SELECT  AccommodationID,
            MIN(price) as MinPrice
        FROM Holiday
        WHERE TradeNameID = 58001
        /*** Other Criteria Here ***/
        GROUP BY AccommodationID

    ) mp
    ON mp.AccommodationID = h2.AccommodationID
    AND mp.MinPrice = h2.price
    WHERE TradeNameID = 58001
    /*** Other Criteria Here ***/

) x on h1.HolidayID = x.HolidayID and …
Run Code Online (Sandbox Code Playgroud)

nhibernate subquery queryover

41
推荐指数
1
解决办法
2192
查看次数

SQL Server - 使用子查询中主查询的列

有没有办法从主查询中实时获取列,并在子查询中使用它?

这样的事情:(在子查询中使用A.item)

SELECT item1, * 
FROM TableA A 
INNER JOIN 
(
    select * 
    from TableB B 
    where A.item = B.item
) on A.x = B.x;
Run Code Online (Sandbox Code Playgroud)

好的,这是真的:

我需要修改这个现有的查询.它以前工作过,但现在数据库发生了变化,我需要做一些修改,添加一些比较.正如您所看到的,有很多JOINS,其中一个是子查询.我需要从一列从主查询(例如从表T0)增加相比,子查询(是这样的:T6.UnionAll_Empresa = T0.UnionALl_Empresa)

Select T0.UnionAll_Empresa,<STUFF>

from [UNION_ALL_BASES]..OINV T0 with (nolock)
inner join [UNION_ALL_BASES]..INV6 T1 with (nolock) on t0.DocEntry = t1.DocEntry and t0.UnionAll_Empresa = t1.UnionAll_Empresa
inner join

(
select 
t1.CompanyID,
T2.CompanyDb,
t1.OurNumber,
T6.BankCode,
T6.BankName,
T3.[Description] Situation,
T1.[Status],
T5.Descrption nomeStatus,
T1.Origin,
T1.DocEntry,
T1.DocType,
T1.ControlKey,
T1.CardCode,
T4.[Description] ContractBank,
T1.PayMethodCode,
T1.DueDate,
T1.DocDate,
T1.InstallmentID,
T1.InstallmentValue,
T1.Correction,
T1.InterestContractural, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server field subquery

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

WHERE col1,col2 IN(...)[使用复合主键的SQL子查询]

给定foo具有复合主键的表(a,b),是否存在用于编写查询的合法语法,例如:

SELECT ... FROM foo WHERE a,b IN (SELECT ...many tuples of a/b values...);
UPDATE foo SET ... WHERE a,b IN (SELECT ...many tuples of a/b values...);
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的,并且您无法修改架构,那么如何执行上述等效操作?

我还将在这里为这些别名的搜索命中设置术语"复合主键","子选择","子选择"和"子查询".

编辑:我对标准SQL的答案感兴趣,以及那些适用于PostgreSQL和SQLite 3的答案.

sql subquery composite-primary-key

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

何时使用SQL子查询与标准连接?

我正在努力重写一些写得不好的SQL查询,他们过度使用子查询.我正在寻找有关子查询使用的最佳实践.

任何帮助,将不胜感激.

sql join subquery

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

在另一个where语句(子查询?)中使用一个sql查询的结果

我看到很多类似的问题,但它们要么是如此复杂,我无法理解它们,或者它们似乎并没有问同样的问题.

这很简单:我有两列:用户(dmid)和下载(dfid).

  1. 选择下载特定文件的所有用户:

    SELECT DISTINCT dmid FROM downloads_downloads where dfid = "7024"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用上面的用户,找到他们都下载的所有文件:

    SELECT dfid from downloads_downloads WHERE dmid = {user ids from #1 above}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 计算并订购dfid结果,这样我们就可以看到每个文件收到的下载次数:

    dfid    dl_count_field
    ----    --------------
    18       103
    3        77
    903      66
    
    Run Code Online (Sandbox Code Playgroud)

我试图回答.

这似乎很接近,但MySql陷入困境,即使在30秒后也没有响应 - 我最终重启了Apache.而且我现在不知道如何在没有语法错误的情况下构造计数和顺序,因为复杂的语句 - 它甚至可能不是正确的语句.

SELECT dfid from downloads_downloads WHERE dmid IN (
    SELECT DISTINCT dmid FROM `downloads_downloads` where dfid = "7024")
Run Code Online (Sandbox Code Playgroud)

mysql sql subquery

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

如何将子查询中的字符串连接到mysql中的单个行?

我有三张桌子:

table "package"
-----------------------------------------------------
package_id      int(10)        primary key, auto-increment
package_name    varchar(255)
price           decimal(10,2)

table "zones"
------------------------------------------------------
zone_id         varchar(32)    primary key (ex of data: A1, Z2, E3, etc)

table "package_zones"
------------------------------------------------------
package_id     int(10)
zone_id        varchar(32)
Run Code Online (Sandbox Code Playgroud)

我要做的是返回包表中的所有信息PLUS该包的区域列表.我希望区域列表按字母顺序排序并以逗号分隔.

所以我正在寻找的输出是这样的......

+------------+---------------+--------+----------------+
| package_id | package_name  | price  | zone_list      |
+------------+---------------+--------+----------------+
| 1          | Red Package   | 50.00  | Z1,Z2,Z3       |
| 2          | Blue Package  | 75.00  | A2,D4,Z1,Z2    |
| 3          | Green Package | 100.00 | B4,D1,D2,X1,Z1 |
+------------+---------------+--------+----------------+
Run Code Online (Sandbox Code Playgroud)

我知道我可以在PHP中使用表示层来完成所需的结果.问题是,我希望能够对zone_list ASC或DESC进行排序,甚至使用"WHERE …

mysql concat list subquery group-concat

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

选择每个用户的最大记录

这似乎应该相当简单,但我在寻找一个适合我的解决方案时遇到了绊脚石.

我有一个member_contracts表具有以下(简化)结构.

MemberID | ContractID   | StartDate | End Date |
------------------------------------------------
1          1              2/1/2002    2/1/2003
2          2              3/1/2002    3/1/2003
3          3              4/1/2002    4/1/2003
1          4              2/1/2002    2/1/2004
2          5              3/1/2003    2/1/2004
3          6              4/1/2003    2/1/2004
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个查询,从该表中选择最近的合同.这是这个小例子的以下输出:

MemberID | ContractID   | StartDate | End Date |
------------------------------------------------
1          4              2/1/2002    2/1/2004
2          5              3/1/2003    2/1/2004
3          6              4/1/2003    2/1/2004
Run Code Online (Sandbox Code Playgroud)

基于每个用户执行此操作非常简单,因为我可以使用子查询来为指定用户选择max contractID.我正在使用SQL服务器,所以如果有一种特殊的方式来做这种味道,我愿意使用它.就个人而言,我喜欢与引擎无关的东西.

但是,我将如何编写一个能够实现所有用户目标的查询?

编辑:我还应该补充一点,我正在寻找每个用户的最大contractID值,而不是最近的日期.

sql sql-server subquery

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