相关疑难解决方法(0)

不存在而不是存在

哪个查询更快?

不存在:

SELECT ProductID, ProductName 
FROM Northwind..Products p
WHERE NOT EXISTS (
    SELECT 1 
    FROM Northwind..[Order Details] od 
    WHERE p.ProductId = od.ProductId)
Run Code Online (Sandbox Code Playgroud)

或者不是:

SELECT ProductID, ProductName 
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
    SELECT ProductID 
    FROM Northwind..[Order Details])
Run Code Online (Sandbox Code Playgroud)

查询执行计划表明他们都做同样的事情.如果是这种情况,这是推荐的形式?

这基于NorthWind数据库.

[编辑]

刚刚找到这篇有用的文章:http: //weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx

我想我会坚持使用NOT EXISTS.

sql sql-server notin

507
推荐指数
9
解决办法
138万
查看次数

SQL Server ON DELETE触发器

我正在尝试创建一个基本数据库触发器,当删除database2.table2中的一行时,该触发器有条件地从database1.table1中删除行.我是触发器的新手,并希望学习实现这一目标的最佳方法.这就是我到目前为止所拥有的.建议?

CREATE TRIGGER sampleTrigger
    ON database1.dbo.table1
    FOR DELETE
AS
    IF EXISTS (SELECT foo
               FROM database2.dbo.table2
               WHERE id = deleted.id
               AND bar = 4)

-- If there is a row that exists in database2.dbo.table2 
-- matching the id of the deleted row and bar=4, delete 
-- it as well.

-- DELETE STATEMENT?

GO
Run Code Online (Sandbox Code Playgroud)

sql-server triggers sql-server-2005

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

DELETE在另一个表中没有匹配的记录

有两个表由id链接:

item_tbl (id)
link_tbl (item_id)
Run Code Online (Sandbox Code Playgroud)

有些记录中item_tbl没有匹配的行link_tbl.一个可以计算其金额的选择将是:

SELECT COUNT(*)
FROM link_tbl lnk LEFT JOIN item_tbl itm ON lnk.item_id=itm.id
WHERE itm.id IS NULL
Run Code Online (Sandbox Code Playgroud)

我想删除那些孤儿记录(那些在其他表中没有匹配的记录),link_tbl但我能想到的唯一方法是:

DELETE FROM link_tbl lnk
WHERE lnk.item_id NOT IN (SELECT itm.id FROM item_tbl itm)
Run Code Online (Sandbox Code Playgroud)

2003年的16,844,347个孤儿记录中有
3,033,811个记录的link_tbl
262,086,253条记录. 服务器有4GB RAM和8核CPU.item_tbl
link_tbl

EXPLAIN DELETE FROM link_tbl lnk
WHERE lnk.item_id NOT IN (SELECT itm.id FROM item_tbl itm)
Run Code Online (Sandbox Code Playgroud)

返回:

Delete on link lnk  (cost=0.00..11395249378057.98 rows=131045918 width=6)
->  Seq Scan …
Run Code Online (Sandbox Code Playgroud)

sql postgresql exists bigdata sql-delete

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

选择仅出现一次的那些行

我有以下数据:

    Number  c1  c2  c3
    325     A   K   NFW
    325     U   G   GFD
    32713   A   K   fgh
    3271    U   G   ghad
    327     A   G   yrg
    3277    A   K   bfb
Run Code Online (Sandbox Code Playgroud)

我不想选择那些不唯一的行.即我只想要那些具有不同"数字"列的行.我的结果应该看起来像:

    Number  c1  c2  c3
    32713   A   K   fgh
    3271    U   G   ghad
    327     A   G   yrg
    3277    A   K   bfb
Run Code Online (Sandbox Code Playgroud)

我编写了以下代码,但它并没有完全正常工作:

SELECT * from [table] GROUP BY [all columns ] HAVING Count(*) = 1
Run Code Online (Sandbox Code Playgroud)

任何建议,以获得他所需的结果将不胜感激.

sql t-sql sql-server

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

SQL使用CASE的位置

我有一个where子句

    ... Where TruckID IN (select VanID from Vantbl)
Run Code Online (Sandbox Code Playgroud)

我喜欢使用一个案例,因此它足够聪明

我有完整的后续行动

     ...  Where TruckID IN 
       CASE WHEN @VehicleType = 'VAN'
        THEN (select VanID from Vantbl)
      CASE WHEN @VehicleType = 'SUV'
       THEN (select SUVID from SUVtbl)
     END
Run Code Online (Sandbox Code Playgroud)

但似乎没有工作.我可以用任何方式让它像这样工作.

sql

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

内连接vs where子句子查询sql server

我正在尝试加快我的存储过程,所以我使用下面的统计信息以两种格式测试我的存储过程

方法1:使用join

set statistics io on 

select top 2000   
    p.Vehicleno, 
    dbo.GetVehicleStatusIcon1(p.Direction, StatusCode, 0) as 'Status',
    location,
    Convert(varchar(13), p.TrackTime, 102) + ' ' + Convert(varchar(13), p.TrackTime, 108) AS 'TrackTime',
    p.Speed, p.Ignition
from 
    pollingdata p 
inner join 
    assignvehicletouser asn on asn.vehicleno = p.vehicleno
where 
    asn.empid = 1
Run Code Online (Sandbox Code Playgroud)

我得到统计结果为

Table 'Worktable'. Scan count 943, logical reads 7671, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'AssignVehicleToUser'. Scan count 1, logical reads 41, …
Run Code Online (Sandbox Code Playgroud)

sql-server join where-clause logical-reads sql-execution-plan

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