标签: query

MySQL中递归获取最高父id

我想找到每个条目最上面的父 ID。例如,

CREATE TABLE t1
(
ID int(11) unsigned NOT NULL,
ParentID int(11) unsigned,
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;

INSERT INTO t1 (ID,ParentID) VALUES (1,NULL),(2,1),(3,2),(4,3);
Run Code Online (Sandbox Code Playgroud)

我意图得到

ID     Highest ParentID
1      NULL
2      1
3      1
4      1
Run Code Online (Sandbox Code Playgroud)

我计划创建一个递归查询(MySQL 8 或 MariaDB 10.5),方法是添加一个条件,以在 Parent ID 为特定值(例如,上述情况下为 NULL)时中断递归。我开始于

WITH RECURSIVE cte (ID, ParentID) as (
  SELECT ID,ParentID FROM t1
  UNION ALL
  SELECT t2.ID,t2.ParentID FROM t1 t2
  INNER JOIN cte on t2.ParentID = cte.ID
)
SELECT * FROM cte; …
Run Code Online (Sandbox Code Playgroud)

mysql join query recursive

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

使用绑定变量时如何解决错误“ORA:01-006:绑定变量不存在”?

我有一个包含以下结构和数据的表:

create table TEST_TABLE
(
  item_number NUMBER,
  item_name   VARCHAR2(50),
  item_col    VARCHAR2(50),
  item_pol    VARCHAR2(50)
)
Run Code Online (Sandbox Code Playgroud)

样本数据:

item_number |  item_name|  item_col |  item_pol
------------------------------------------------
     1      |   blue    |     b     |   c
     2      |   red     |     d     |   a
     3      |   black   |     e     |   a
     4      |   yellow  |     d     |   b
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用的示例过程bind variables

create or replace procedure test_bind_variable(res         out sys_refcursor,
                                               item_number varchar2,
                                               item_name   varchar2,
                                               item_col    varchar2,
                                               item_pol    varchar2) is

  qry varchar2(8000);

begin

  qry := 'select * from test_table where …
Run Code Online (Sandbox Code Playgroud)

oracle query oracle-11g-r2 plsql error-handling

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

选择 Distinct 和 Inner Join 带来重复的值

我在使用内部联接从两个表中获取唯一值时遇到问题。

\n
SELECT distinct cast (opd.order_number as integer), p.payment_id ,\n    pt.transaction_status, \n    opd.installments_number, \n    pt.amount, \n    pt.origin_amount,\n    p.payment_capture_type,\n    opd.brand,\n    pt.created_date, \n    d."name" \nFROM payment p \nINNER JOIN payment_transaction pt ON pt.payment_id = p.payment_id\ninner join "domain" d on d.domain_id = p.domain_id \nINNER JOIN attempted_online_payment_data opd ON p.payment_id = CAST ( opd.order_number AS INTEGER )\nWHERE \np.created_date >= \'2021-11-01\' and status = 1\n
Run Code Online (Sandbox Code Playgroud)\n

这是我正在使用的查询,我想要一个 payment_id\xc2\xb4s 的唯一值列表,但是当我这样做时,由于某种原因它会带来两个相同的 payment_id。

\n

在此输入图像描述

\n

如何为每个 payment_id 获取唯一的行?

\n

postgresql join query distinct

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

如果过滤列有值,则查询结果优先

我有一个"customer_config"包含这些列的表:

company (varchar)
warehouse (numeric)
section (numeric)
config_keyword (varchar)
config_value (varchar)
Run Code Online (Sandbox Code Playgroud)

这两config_*列可以应用于整个公司(warehousesection为空)、公司内的整个仓库(section为空)或仓库内的一个部分。

因此,我们可以为公司设置一个默认行,然后使用一个或多个行来覆盖特定仓库或仓库和部分的配置值。

我只想返回给定公司、仓库和部门的最具体的行。像这样的伪代码:

results = select * from customer_config where (all match)
if results empty
    results = select * from customer_config where (company_code and warehouse match)
if results empty
    results = select * from customer_config where (company_code matches)
Run Code Online (Sandbox Code Playgroud)

最具体的行应优先。

更新

同一级别上可以有多个相同的条目config_keyword
是否也可以为单个关键字返回多行?

postgresql query precedence

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

如何在 SQL Server 中使用 SUM 和 GROUP BY 连接两个表

我有2张桌子

  1. 产品
ID 指定
1 古柯
2 百事可乐
3 芬达
4
5

2)子产品

产品编号 姓名 数量
1 SM 10
1 lg 10
1 XL 20
2 1升 10
2 2升 20
2 5升 20
3 10
3 20
4 20
4 克德 30

我想要的是这样的:产品表中的指定和总数量,代表具有相同product_id的数量的总和

指定 总数(量
古柯 40
百事可乐 50
芬达 30
50

注:我使用 SQL 服务器

join sql-server query group-by sum

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

Postgres 多列排序

想象一下我有一个看起来像这样的结果集:

+----+------------+------------+
| Id |  Date_One  |  Date_Two  |
+----+------------+------------+
|  1 | 2022-05-12 | null       |
|  2 | 2022-05-13 | 2022-05-11 |
|  3 | null       | 2022-05-14 |
+----+------------+------------+
Run Code Online (Sandbox Code Playgroud)

我想首先根据最早的日期对结果进行排序,而不考虑列。每行将有一个Date_OneDate_Two填充。它们永远不会都为空。

因此上述结果集的结果将是:

+----+------------+------------+
| Id |  Date_One  |  Date_Two  |
+----+------------+------------+
|  2 | 2022-05-13 | 2022-05-11 |
|  1 | 2022-05-12 | null       |
|  3 | null       | 2022-05-14 |
+----+------------+------------+
Run Code Online (Sandbox Code Playgroud)

(因为 Id 2Date_Two早于 Id 1 Date_One)。

我不确定如何创建我的ORDER …

postgresql query order-by

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

MySQL:如何优化导致负载非常高的某个SELECT语句?

有一个包含 25.000.000 个条目的表,我有以下查询,该查询每 2 秒启动一次,这会导致非常高的负载(在 Amazon AWS 中高达 40 AAS)。执行时间需要20秒到5分钟,甚至会导致用户浏览器超时,掉线率很高。

SELECT COUNT ( * ) AS `chk` 
  FROM ( SELECT `item_id` 
           FROM `items` 
          WHERE `item_status` IN (...) 
            AND `item_type` = ? 
            AND `user_id` != ? 
            AND `item_name` IN (...) 
          LIMIT 3 
       ) AS OTHERS
;
Run Code Online (Sandbox Code Playgroud)

索引优化已完成 - 、、 和user_id均已item_name建立索引(每列一个索引)。item_typeitem_status

更多信息:

  • 一个用户拥有 1 - 1.000.000 百万条条目
  • item_name 是varchar128
  • item_type 的基数为 7
  • item_status 的基数也是 7
  • 只需知道是否有三个或更多匹配项

请注意,在大约 50% 的情况下,MySQL 必须检查完整的表,因为找到的项目少于 3 个。因此,该限制仅在商品数量超过 3 件的情况下才有用。 …

mysql performance index query select

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

使用现有表名的WITH子句是否有效?

假设我有一张桌子Entry。在查询期间WITH替换表的子句是否有效?Entry我尝试使用 SQLite 和 MySql,它似乎可以工作,但我想在应用程序中使用它之前确定这是有意的。

让我添加一些细节。假设我有一个表Entry和另一个表Thing,以及这样的查询

SELECT Entry.k, Entry.v, Thing.v2
FROM Entry INNER JOIN Thing ON Entry.v = Thing.k
Run Code Online (Sandbox Code Playgroud)

以下内容有效吗?

WITH Entry AS (SELECT 1 AS k, 1234 AS v)
SELECT Entry.k, Entry.v, Thing.v2
FROM Entry INNER JOIN Thing ON Entry.v = Thing.k
Run Code Online (Sandbox Code Playgroud)

这似乎符合我的要求,但是我可以指望这种行为不是错误或未定义的行为吗?在 SQLite 或 MySQL 的文档中找不到任何明确允许或禁止它的内容。

(我知道在这个特定的例子中我可以SELECT ... FROM Thing WHERE ...。这不是这个问题的重点 - 请相信我,我有充分的理由编写我正在编写的查询:))

mysql sqlite query cte temporary-tables

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

SQL Server 中不等于运算符不返回 NULL 值

我有以下查询,我正在查找该列不等于 1 的任何行istrue。但结果只包含 0 的记录,忽略 null 的记录。虽然我知道使用(istrue != 1 or istrue is null)会产生预期的结果,但我很好奇导致 SQL Server 排除 null 值的底层机制。您能否提供对此行为的见解?谢谢!

create table #test
(
id int,
val varchar(100),
istrue bit
)

insert into #test values 
(1, 'test-1', 1),
(2, 'test-2', 0),
(3, 'test-3', 1),
(4, 'test-4', 0),
(5, 'test-5', null),
(6, 'test-6', null)

select * from #test
where istrue != 1

drop table if exists #test
Run Code Online (Sandbox Code Playgroud)

null sql-server query

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

数据库不可知条件

我正在编写一个 Drupal 模块,我希望它在 PostgreSQL 和 MySQL 之间是不可知的。我有一个从条件中获取其值的字段,我最初将它写为IF(). 然后我发现这IF()是一个 MySQL 主义。所以,我查找了 PostgreSQL 的条件语句,CASE似乎是最好的工具。

但是,我注意到以 PostgreSQLCASE结尾END,而在MySQL 中以END CASE. 这会破坏我对数据库不可知论的希望吗?我可以用条件编写一个不可知的查询吗?

mysql postgresql query

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