我想删除某个查询返回的所有记录,但我找不到正确的方法来执行此操作。但是,我尝试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 不是唯一的(该表中也没有其他列是全局唯一的)
在雪花上,是否有其他方法可以使用 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)
但如果我使用删除。它显示语法错误
如何删除重复的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) 如果列表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)
我怎么能以编程方式做到这一点?
说,我有一个像这样的表(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) 我有一个带有两个带外键的表的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会有所帮助,但我不希望它每次都自动发生.我应该暂时允许吗?我应该使用临时表还是什么是最佳解决方案?
有人告诉我,我们从不删除表中的记录,因为将来需要它.并且我可以知道除了DELETE之外还有什么替代方法可以停止行而不是从表中完全删除行?
我有一个不活跃的系统.它应该在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) 我需要选择记录,检查我的选择标准并加强它,直到我得到我需要的所有记录,然后删除(或以其他方式更改)那些.让我们暂时删除.
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 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的那些;
所以场景看起来像这样:
从相邻表UserTransactions中的两个重复项中删除FK记录SID
然后执行DTV&Tim写的稍微更改的查询,只删除那些重复且设置了InQueue = 0的记录;
sql-delete ×10
sql ×6
mysql ×3
sql-server ×3
duplicates ×2
distinct ×1
foreign-keys ×1
h2 ×1
oracle ×1
php ×1
python ×1
select ×1
snowflake-cloud-data-platform ×1
string ×1
t-sql ×1
timestamp ×1