标签: sql-delete

如何删除子查询返回的所有记录?

我想删除某个查询返回的所有记录,但我找不到正确的方法来执行此操作。但是,我尝试DELETE FROM mytable WHERE EXISTS (subquery)删除表中的所有记录,而不仅仅是子查询选择的记录。

我的子查询如下所示:

SELECT 
MAX(columnA) as columnA,
-- 50 other columns
FROM myTable 
GROUP BY
-- the 50 other columns above
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

这应该很容易,但我的思绪现在被困住了。我很感谢任何建议。

编辑:columnA 不是唯一的(该表中也没有其他列是全局唯一的)

sql oracle sql-delete

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

是否有其他方法可以使用 CTE 使用 DELETE 雪花 SQL 语句进行查询?

在雪花上,是否有其他方法可以使用 CTE 使用 DELETE SQL 语句进行查询?看来这是不可能的。

with t as (
select *  from "SNOWFLAKE_SAMPLE_DATA"."TPCDS_SF100TCL"."CALL_CENTER"
), p as (select t.CC_REC_END_DATE, t.CC_CALL_CENTER_ID , t.CC_REC_START_DATE from t where 1=1 AND t.CC_REC_START_DATE > '2000-01-01')

delete from p
Run Code Online (Sandbox Code Playgroud)

例如:如果我们使用 select,我们会得到一些结果。 具有简单 SQL 选择的 CTE

但如果我使用删除。它显示语法错误

带删除的 CTE

sql sql-delete snowflake-cloud-data-platform

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

如何删除重复的MySQL记录(但只保留一条)

如何删除重复的MySQL记录(但只保留一条)

大家好,我有一个问题,我有几条具有相同ID的记录,我想消除重复的记录,但只留下一条。对 mysql 语句有什么想法吗?

我有这个语句来查看记录和重复项的数量,但当我使用删除时它对我不起作用:

SELECT 
    email, 
    COUNT(email)
FROM
    contacts
GROUP BY email
HAVING COUNT(email) > 1;
Run Code Online (Sandbox Code Playgroud)

我使用这个语句,但它只删除一个重复记录:

DELETE FROM wp_options  WHERE option_id=5 limit 1;
Run Code Online (Sandbox Code Playgroud)

有什么办法可以大规模做吗?

更新:我正在使用此语句,但它消除了所有重复记录而不留下任何记录:

DELETE FROM xhi_options
WHERE  option_id IN (SELECT option_id
                FROM   (SELECT option_id
                        FROM   xhi_options
                        GROUP  BY option_id
                        HAVING COUNT(option_id) > 1) AS T) 
Run Code Online (Sandbox Code Playgroud)

mysql duplicates sql-delete

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

使用python list中的信息删除MYSQL中的多个行

如果列表LL:

LL = ['foo', bar', 'noo', 'boo',]

在MySQL表中,使用其他ID在列ID中进行测试.

我可以使用以下内容删除LL中ID为ID的所有行:

 csr.execute("""DELETE FROM test.test WHERE ID = "Foo"; """)
  csr.execute("""DELETE FROM test.test WHERE ID = "bar"; """)  
  csr.execute("""DELETE FROM test.test WHERE ID = "noo"; """)
  csr.execute("""DELETE FROM test.test WHERE ID = "boo"; """)  
Run Code Online (Sandbox Code Playgroud)

我怎么能以编程方式做到这一点?

python mysql string sql-delete

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

陷入了对t-SQL中单个表的选择性DELETE语句

说,我有一个像这样的表(SQL Server 2008):

CREATE TABLE tbl (ID INT, dtIn DATETIME2, dtOut DATETIME2, Type INT)

INSERT tbl VALUES
(1, '05:00', '6:00', 1),  -- will be removed
(2, '05:00', '7:00', 1),  -- will be removed
(3, '05:01', '8:00', 1),
(4, '05:00', '8:00', 1),
(5, '05:00', '6:00', 2),  -- will be removed
(6, '05:00', '7:00', 2),
(7, '05:00', '7:00', 3),
(8, '04:00', '7:00', 3)
Run Code Online (Sandbox Code Playgroud)

我需要删除相同'类型'的所有记录(如果找到2个或更多),使用相同的'dtIn'作为'type',除了具有最大'dtOut'的记录.换句话说,上表应该导致:

(3, '05:01', '8:00', 1),   -- no matching 'dtIn' for 'type' = 1
(4, '05:00', '8:00', 1),   -- largest …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-delete

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

使用外键从两个h2表中删除

我有一个带有两个带外键的表的h2数据库

CREATE TABLE master (masterId INT PRIMARY KEY, slaveId INT);
CREATE TABLE slave (slaveId INT PRIMARY KEY, something INT,
    CONSTRAINT fk FOREIGN KEY (slaveId) REFERENCES master(slaveId));
Run Code Online (Sandbox Code Playgroud)

并需要类似的东西

DELETE master, slave FROM master m JOIN slave s ON m.slaveId = s.slaveId
    WHERE something = 43;
Run Code Online (Sandbox Code Playgroud)

即,从两个表中删除(AFAIK在MySql中工作).因为FOREIGN KEY我不能先从master中删除.当我从奴隶中删除时,我丢失了要从主站删除哪些行的信息.使用ON DELETE CASCADE会有所帮助,但我不希望它每次都自动发生.我应该暂时允许吗?我应该使用临时表还是什么是最佳解决方案?

foreign-keys h2 cascading-deletes sql-delete

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

替代数据库中的DELETE记录?

有人告诉我,我们从不删除表中的记录,因为将来需要它.并且我可以知道除了DELETE之外还有什么替代方法可以停止行而不是从表中完全删除行?

sql database-design sql-delete

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

15分钟后删除记录

我有一个不活跃的系统.它应该在15分钟后从非活动表中删除用户.我还有一个代码,如果在该表中找不到该用户,则将该用户记录下来.非活动脚本在每次刷新页面时更新用户.

这是我尝试的非活动代码,到目前为止它不起作用:

$result = mysqli_query($con,"SELECT * FROM inactive");

while($row = mysqli_fetch_array($result))

if ($row['inactive'] > timestampadd(MINUTE, -15, now()))
  {



    }else {

$db_query = "DELETE FROM inactive WHERE username='$username'";
$result = mysql_query($db_query);


    }
Run Code Online (Sandbox Code Playgroud)

php mysql timestamp sql-delete

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

SQL选择删除DIRECTLY

我需要选择记录,检查我的选择标准并加强它,直到我得到我需要的所有记录,然后删除(或以其他方式更改)那些.让我们暂时删除.

select <fields> from <database> where <condition>
Run Code Online (Sandbox Code Playgroud)

(检查,调整条件)

delete from <database> where (<same condition>)
Run Code Online (Sandbox Code Playgroud)

这里不是像管道那样更容易将选定的记录直接推送到删除语句中吗?我使用技术选择所有记录号到临时数据库,但是没有直接的方法吗?

我搜索了Stack Overflow,发现了一些问题,人们会问如何将select语句转换为delete语句,这不是我想要的.我的想法是这样的:

select ... from ... where ... | delete
Run Code Online (Sandbox Code Playgroud)

或者像这样的东西作为一种解决方法......

/* create a list of records to delete */
select ... from ... where ... into @temp

/* shove the list into delete */
delete @temp  
Run Code Online (Sandbox Code Playgroud)

SQL标准是否支持我想要的机制,或者是否有特定于平台的方法(MS SQL Server)?

sql sql-server select sql-delete

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

从SQL Server表中删除重复项

我的SQL Server表中有一个情况,我有许多重复的记录,如下所示:

 SID    Username                                InQueue
------------------------------------------------------------------    
 162    peeeer2  492    2017-01-18 12:20:21.820   0    354
2791    peeeer2  460    2017-01-11 00:00:00.000   1    NULL
Run Code Online (Sandbox Code Playgroud)

这里不需要的记录是我设置的peeeer2用户InQueue = true.我需要删除InQueue列设置为1的所有重复项,另一个标准是用户名实际上是重复的...

表名是SearchedUsernames:

delete from SearchedUsernames
where Username ??
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

编辑:

@TimSchmelter ty这么多,这就像一个魅力.但是我仍然收到错误.我需要首先删除此表的相邻FK.例如,当我在邻居表中有一个名为UserTransactions的相应FK记录时,如下所示:

 ID      SID                              
----------------  
 162    162
2791    2791    
Run Code Online (Sandbox Code Playgroud)

我需要首先删除此邻居表中的所有记录,然后使用您编写的查询删除重复项.但是,这次我只想删除那些有重复记录且设置InQueue = 0的那些;

所以场景看起来像这样:

  1. 从相邻表UserTransactions中的两个重复项中删除FK记录SID

  2. 然后执行DTV&Tim写的稍微更改的查询,只删除那些重复且设置了InQueue = 0的记录;

sql sql-server distinct duplicates sql-delete

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