SQL查询删除表中的相关记录
Posted
技术标签:
【中文标题】SQL查询删除表中的相关记录【英文标题】:SQL Query to remove related records in table 【发布时间】:2017-05-26 23:43:16 【问题描述】:我有一个简单的表格,其中包含名称、价格、状态等基本销售信息。 对于每个客户交互,它们都被输入到带有 NAME 和 PRICE 的表中。 如果该客户已取消交易,则添加另一条记录,其中包含 NAME、负 PRICE 和 STATUS = 已取消。这是一个示例表
+------+--------+-----------+
| NAME | PRICE | STATUS |
+------+--------+-----------+
| bob | 100 | |
| mary | 100 | |
| mary | -100 | cancelled |
| andy | 250 | |
| mary | 250 | |
+------+--------+-----------+
我想要做的是删除已取消交易的正面和负面记录,以便生成的表格看起来像这样。
+------+--------+-----------+
| NAME | PRICE | STATUS |
+------+--------+-----------+
| bob | 100 | |
| andy | 250 | |
| mary | 250 | |
+------+--------+-----------+
关于如何在 SQL 中执行此操作的任何建议?
【问题讨论】:
【参考方案1】:将表与自身连接以匹配相关记录:
DELETE t1
FROM yourTable AS t1
JOIN yourTable AS t2 ON t1.name = t2.name AND t1.price IN (t2.price, -t2.price)
WHERE t2.status = 'canceled'
联接查找具有相同名称的行,并且价格是相同的价格或价格的负数。 WHERE
子句将此限制为匹配已取消的行。
DEMO
【讨论】:
我遇到语法错误。这需要嵌入到另一个 SELECT * 语句中吗? t2 来自哪里?另外,您能解释一下这种方法的逻辑吗? 抱歉,第二个AS t1
应该是AS t2
。
“FROM”处或附近的语法错误。我在 carto onlines web 界面上的 SQL 编辑器中执行此操作,如果这有什么不同的话
您确定您使用的是 mysql,而不是其他数据库吗?
不确定他们在 Carto 中使用的是什么 SQL 版本。看看我是否可以修补它并让它工作以上是关于SQL查询删除表中的相关记录的主要内容,如果未能解决你的问题,请参考以下文章