我想将表中的值抓取到同一表中不同值的两个不同列中。使用此查询作为示例(注意选择是如何在别名为 2 个不同表的同一个表上的):
SELECT a.myVal, b.myVal
FROM MyTable a, MyTable b
WHERE
a.otherVal = 100 AND
b.otherVal = 200 AND
a.id = b.id
Run Code Online (Sandbox Code Playgroud)
当我在我的数据集上运行这样一个相对简单的查询时,它可以工作 - 只是需要很长时间。有没有更好/更聪明的方式来编写这个查询?

我有一个包含以下文本的表格,我要搜索的关键字是“搜索”。所以我写了一个查询
SELECT [ID]
,[TextValue]
FROM
[dbo].[SearchLike]
WHERE
[TextValue] LIKE '%Search%'
Run Code Online (Sandbox Code Playgroud)
Q.1如何修改查询,以便只返回文本中包含“搜索”的记录,而不是使用“LSearch”。即根据图像前三个记录只返回。?
我有一个电子邮件类型的应用程序,想为用户选择所有消息(收件箱)。问题是我将电子邮件的标题部分规范化到数据库中,这样平面数据就会进入消息表,而从、到、抄送、密件抄送则存储到另一个表中。
根据 PK/ FK 关系。
我非常重视的一件事是 SQL 解决方案的效率,因为这将是多次执行的代码,并且可能是整个数据库中运行次数最多的 sql
这里的上下文是我的数据库模式的视图。

为什么
SELECT Barraportfolioname
FROM portfolio
WHERE id IN (SELECT DISTINCT i1.portfolioid
FROM Import i1
LEFT OUTER JOIN Import i2
ON i1.PortfolioID = i2.PortfolioID
AND i2.ImportSetID = 82
WHERE i1.ImportSetID = 83
AND i2.ID IS NULL)
Run Code Online (Sandbox Code Playgroud)
需要 0 秒,而以下查询需要 5 秒。
SELECT DISTINCT p.BarraPortfolioName AS name
FROM Import i1
INNER JOIN Portfolio p
ON p.ID = i1.PortfolioID
LEFT OUTER JOIN Import i2
ON i1.PortfolioID = i2.PortfolioID
AND i2.ImportSetID = 82
WHERE i1.ImportSetID = 83
AND i2.ID IS NULL;
Run Code Online (Sandbox Code Playgroud)
我正在使用 SQL Server。这两个表在查询中使用的所有列上都有索引,即portfolioid、id、importsetid。 …
我还没有决定数据库。我对 MySQl 有经验,并且对MongoDB很感兴趣。
让产品成为有线电视提供商的套餐:
{
name: "Virgin TV",
price: 20
},
{
name: "Sky",
price: 25
}
Run Code Online (Sandbox Code Playgroud)
每个包裹都有一些条件。的天空包例如可以是:
但Virgin 套餐的条件会有所不同。
我只能想到为每个不同的条件创建类似存储过程的东西?
如果我不必标准化所有条件以适应数据库模式,那就太好了,因为新条件很容易来来去去。
编辑: 我已经意识到 2 个要点
现在,我们的 Sky 包装及其状况可以轻松存储:
db.packages.insert({
name: "Sky"
price: 25,
condition: function(object, user_input){
time_discount = user_input.time > 0 and user_input.time < 6 ? 10 : 0; …Run Code Online (Sandbox Code Playgroud) 对于这两个查询,我们是否体验到明显的性能差异?
INSERT INTO table (col1, col2, col3, col4, col5) ...
Run Code Online (Sandbox Code Playgroud)
和
INSERT INTO table (col5, col3, col1, col2, col4) ...
Run Code Online (Sandbox Code Playgroud)
是否需要INSERT按照表中列的顺序排列列?
我有一系列表格,其中包含从各种设备收集的大量高精度数据。收集它们的时间间隔各不相同,甚至在时间序列中徘徊。我的用户希望能够选择日期范围并以特定频率获得这些变量的平均值/最小值/最大值。这是我对此进行的第二次尝试,它有效,但我想知道是否有更好/更快的方法来实现这一目标?
declare @start datetime
declare @end datetime
set @start = '3/1/2012'
set @end = '3/3/2012'
declare @interval int
set @interval = 300
declare @tpart table(
dt datetime
);
with CTE_TimeTable
as
(
select @start as [date]
union all
select dateadd(ss,@interval, [date])
from CTE_TimeTable
where DateAdd(ss,@interval, [date]) <= @end
)
insert into @tpart
select [date] from CTE_TimeTable
OPTION (MAXRECURSION 0);
select t.dt, avg(c.x1), min(c.x1), max(c.x2), avg(c.x2), min(c.x2), max(c.x2) from clean.data c ,
@tpart t
where
ABS(DateDIFF(ss, t.dt , c.Date) ) <= …Run Code Online (Sandbox Code Playgroud) 我有一个这样的相关子查询(来自BOL):
SELECT DISTINCT c.LastName, c.FirstName, e.BusinessEntityID
FROM Person.Person AS c JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = c.BusinessEntityID
WHERE 5000.00 IN
(SELECT Bonus
FROM Sales.SalesPerson sp
WHERE e.BusinessEntityID = sp.BusinessEntityID) ;
GO
Run Code Online (Sandbox Code Playgroud)
当我使用连接重写此查询时
select c.LastName, c.FirstName, e.BusinessEntityID, d.Bonus
from Person.Person as c
inner join HumanResources.Employee as e on e.BusinessEntityID = c.BusinessEntityID
inner join Sales.SalesPerson as d on d.BusinessEntityID = c.BusinessEntityID
where Bonus = 5000.00
Run Code Online (Sandbox Code Playgroud)
看看实际的执行计划,它在两个查询中看起来完全一样。为什么?我在想,由于嵌套循环和执行计划看起来不同,相关子查询要慢得多?是不是因为这些表的数据不多?
我想使用 TABLESAMPLE 从 PostgreSQL 满足特定条件的行中随机采样。
这运行良好:
select * from customers tablesample bernoulli (1);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将条件嵌入脚本中。例如这个
select * from customers where last_name = 'powell' tablesample bernoulli (1);
Run Code Online (Sandbox Code Playgroud)
抛出这个错误:
SQL 错误 [42601]:错误:“tablesample”位置或附近的语法错误
:71
公共汽车和乘客到达车站。如果某时间有一辆公共汽车到达车站tbus
,并且某时间有一名乘客到达tpassenger where tpassenger <= tbus,则该乘客将尝试使用第一辆未超出容量的可用公共汽车。
如果公交车到达车站时等待的乘客数量超过了其容量capacity,则只有capacity乘客才会乘坐公交车。
我想输出每辆公交车上出现的用户(如果两个乘客同时到达,则应优先考虑passenger_id值较小的乘客)。
输入:
巴士表:
| 总线 ID | 到达时间 | 容量 |
|---|---|---|
| 1 | 2 | 1 |
| 2 | 4 | 10 |
| 3 | 7 | 2 |
旅客表:
| 乘客 ID | 到达时间 |
|---|---|
| 11 | 1 |
| 12 | 1 |
| 13 | 5 |
| 14 | 6 |
| 15 | 7 |
输出:
| 总线 ID | 容量 | b_到达 | 点 | 乘客 ID | p_到达 |
|---|---|---|---|---|---|
| 1 | 1 | 2 | 1 | 11 | 1 |
| 2 | 10 | 4 | 1 | 12 | 1 |
| 2 | 10 | 4 | 2 | 无效的 | 无效的 |
| 2 | 10 | 4 | 3 | 无效的 | 无效的 |
| 2 | 10 | 4 … |
query ×10
sql-server ×3
performance ×2
functions ×1
innodb ×1
insert ×1
mongodb ×1
mysql ×1
postgresql ×1
random ×1
reporting ×1
t-sql ×1
table ×1
where ×1