标签: query

从多个表中选择时,我得到了记录的乘法

在下面执行此查询时,它花费的时间太长。结果是记录太多,数据库中的记录可能更多。查询应返回大约 117.000 条记录。即在半年内进入数据库的记录量。

为什么这个查询成倍增加,导致数百万条记录?如果有人能告诉我我被卡住的地方,我会很高兴。

/* Formatted on 2011/08/05 17:09 (Formatter Plus v4.8.7) */
SELECT   t2.flag, t3.reg_number, t1.reportdate, t1.latitude, t1.longitude,
     t1.value2 course, ((t1.measspeed) * 3.6) / 1.852, t1.status alarms
FROM traffic t1, details t2, registernumbers t3
WHERE     t1.mobileno = t2.mobile
     AND t2.mobile = t3.mobileno
     AND UPPER (t2.flag) = UPPER ('BEL')
     AND t1.reportdate BETWEEN '1/jan/2011' AND '1/jul/2011'
     AND (latitude > 52 AND longitude > 2)
     AND latitude > 48
  OR (latitude < 52 AND longitude > 2)
  OR (latitude > 52 AND …
Run Code Online (Sandbox Code Playgroud)

oracle query

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

需要有关此查询的一些帮助获取我和我所有朋友的所有状态及其相关评论

我有几天时间处理这个查询,但无法按我的意愿工作。这篇文章与此相关来自不同表的几个值,我在其中艰难找到了解决方案,但我完全错误并丢失了:(。所以基本上与另一篇文章的架构相同:5 个表:default_users、default_profiles、default_status、default_comment和 default_friend。这是每个的 SQL:

default_comment

CREATE TABLE `default_comment` (
  `comment_id` int(11) NOT NULL AUTO_INCREMENT,
  `friend_id` int(11) NOT NULL,
  `message` text COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `status_id` int(11) NOT NULL,
  `device` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13007 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Run Code Online (Sandbox Code Playgroud)

默认好友

CREATE TABLE `default_friend` (
  `friend_id` int(8) NOT NULL,
  `user_id` int(8) NOT NULL,
  `is_suscriber` tinyint(1) NOT NULL DEFAULT '1',
  `privacy` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` timestamp NOT …
Run Code Online (Sandbox Code Playgroud)

mysql performance query mysql-5.5 query-performance

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

高效查询数据库以获取大量数据

这是我的查询

SELECT *
FROM
    (
        SELECT a.*, rownum rnum
        FROM
            (
                SELECT id, data
                FROM t
                ORDER BY id
            ) a
       WHERE rownum <= HIGHER
    )
WHERE rnum >= LOWER;
Run Code Online (Sandbox Code Playgroud)

我有大量数据,因此我一次获取其中的一部分,比如第一次尝试从 1 到 100,第二次尝试从 101 到 200,依此类推。

如果我执行上面的查询,它将对每个数据部分执行以下操作:

SELECT id, data
FROM t
ORDER BY id
Run Code Online (Sandbox Code Playgroud)

我认为对每个部分都这样做效率很低。我不能做一些像订购我的数据集并应用 rownum 之类的事情吗?它会有任何用处吗?

performance oracle query

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

如何检查在另一个表中没有具有某些特定值的条目的记录?

例如,如果我们有两个表:表 1 和表 2

表 1 - 主表(所有记录的唯一条目)表 2 - 是一个历史表(其中包含基于时间戳的同一记录的许多条目)(还包含一些特定的字段类型)

我需要检索数据,例如 table1 中的所有数据,其中没有 type = 'Some vaue' 的记录条目

query

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

使用 OR 或 IN 子句查询有序列表

我正在items从数据库中查询并将其显示给用户。(在我的示例中,我将contacts在 table 中使用tContacts

用户items按他决定的顺序选择几个(用户可以随机选择项目,因此不能指定要订购的列)。

在应用程序中,我itemsordered list.

目前我查询这些对象的更多详细信息one-by-one

是否可以创建一个带有“有序列表”的查询,它items相同的顺序返回?

类似于(是的,这很丑 - 可能也达到了最大 sql 查询大小):

SELECT * FROM (
    --how to append this list...
    SELECT 0 as listIndex, * from tContacts where conIdContact = 13259;
    SELECT 1 as listIndex, * from tContacts where conIdContact = 12472;
    [...]
    SELECT 568 as listIndex, * from tContacts where conIdContact = 12422;
)
ORDER BY listIndex
Run Code Online (Sandbox Code Playgroud)
  • 或:我是否必须继续查询 one-by-one …

query order-by

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

如何将最后一次和第一次出现的项目放入单独的列中?

我确实有一张休闲表:

id name     value
1  Daniel   3
2  Daniel   7
3  Daniel   2
4  Carol    9
5  Carol    4
6  Carol    9
7  Ray      5
8  Charles  1
Run Code Online (Sandbox Code Playgroud)

我想在如下表中获取第一个和最后一个值(按 排序id):

name    value_1st  value_last
Daniel  3         2
Carol   9         9  
Ray     5         NULL
Charles 1         NULL
Run Code Online (Sandbox Code Playgroud)

如何编写查询以获取按名称分组并按 id 排序的最后一次和第一次出现的值,像这样?

mysql query greatest-n-per-group

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

存储过程使用的 UDF 是否在 SP 本身中进行了优化/合并?

这个问题让我疯狂了几天,我可能已经找到了答案,但我需要确认并检查最终的简单解决方案。

当存储过程使用一些用户定义的函数时,UDF 计划是合并到主计划中并且一切都得到优化还是每次都直接调用?

假设它没有发生,有没有办法强制 SQL Server 为特定的 SP 执行它?

sql-server query optimization

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

查询在特定城市的所有分行都有存款的客户

我有 3 个表如下:

Customer (CustomerName , CustomerCity , CustomerStreet)
Branch   (BranchName , BranchCity)
Deposit  (CustomerName , BranchName , AccountNumber , Balance)
Run Code Online (Sandbox Code Playgroud)

在这里,我向您展示上表的示例数据:

Customer ('John','City1','Street1')
         ('Lili','City2','street2')

Branch   ('Branch1','Kaj')
         ('Branch2','Bahar')
         ('Branch3','Bahar')
         ('Branch4','Bahar')

Deposit  ('John','Branch1',12,1000)
         ('Lili','Branch1',123,1222)
         ('Lili','Branch2',124,45233)
         ('Lili','Branch3',345,6000)
         ('Lili','Branch4',567,5600)
Run Code Online (Sandbox Code Playgroud)

所以根据上面的信息,我需要一个查询来给我在 Bahar 的所有分行都有存款的 CustomerName 。

我应该在输出中看到“Lili”,因为它在 Bahar 的所有分支都有存款,但我不应该看到 John,因为它只在 Bahar 的一个分支中有存款。

我尽力编写查询,但我不能。你能帮我解决这个问题吗?

sql-server query t-sql

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

删除前导和尾随引号

我有一个可能以引号开头和结尾的字段。如果字符串以引号开头和结尾,我只想删除引号。如果字符串中存在引号,那么我希望保留它们。

REVERSE如果该字段确实以引号开头和结尾,我已经使用了一些有用的东西,但如果不是,则它只返回空值。

如果字段结果不是以引号开头,我如何确保我仍然获得字段结果?

我拥有的:

REVERSE(STUFF(REVERSE(STUFF(fieldname, CHARINDEX('"', fieldname), LEN('"'), '')), CHARINDEX('"', REVERSE(STUFF(fieldname, CHARINDEX('"', fieldname), LEN('"'), '')), 1), 1, ''))
Run Code Online (Sandbox Code Playgroud)

sql-server query t-sql sql-server-2016 string-manipulation

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

如何计算没有零的小数

如何计算所有小数位直到第一个零

例如,我有一个名为 x 的列,其中包含一个数值数据类型值 1.955000000

我想计算没有零的小数位。所以在这里我希望查询输出 3 而不是 9(带零)

postgresql query decimal

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