Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 删除表中相关记录的SQL查询_Mysql_Sql_Database Design - Fatal编程技术网

Mysql 删除表中相关记录的SQL查询

Mysql 删除表中相关记录的SQL查询,mysql,sql,database-design,Mysql,Sql,Database Design,我有一个简单的表格,上面有基本的销售信息,如名称、价格、状态。 对于每个客户交互,都会将其输入到带有名称和价格的表中。 如果该客户已取消交易,则会添加另一条记录,其中包含名称、负价格和状态=已取消。下面是一个示例表 +------+--------+-----------+ |名称|价格|状态| +------+--------+-----------+ |鲍勃| 100 || |玛丽| 100 || |玛丽|-100 |取消| |安迪| 250 || |玛丽| 250 || +------+-

我有一个简单的表格,上面有基本的销售信息,如名称、价格、状态。 对于每个客户交互,都会将其输入到带有名称和价格的表中。 如果该客户已取消交易,则会添加另一条记录,其中包含名称、负价格和状态=已取消。下面是一个示例表

+------+--------+-----------+
|名称|价格|状态|
+------+--------+-----------+
|鲍勃| 100 ||
|玛丽| 100 ||
|玛丽|-100 |取消|
|安迪| 250 ||
|玛丽| 250 ||
+------+--------+-----------+
我想做的是删除已取消交易的正记录和负记录,以便生成的表如下所示

+------+--------+-----------+
|名称|价格|状态|
+------+--------+-----------+
|鲍勃| 100 ||
|安迪| 250 ||
|玛丽| 250 ||
+------+--------+-----------+

关于如何在SQL中执行此操作,有什么建议吗?

将表本身连接起来以匹配相关记录:

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
子句将此限制为已取消的匹配行


我收到一个语法错误。这是否需要嵌入到另一个SELECT*语句中?t2来自哪里?另外,您能解释一下这种方法的逻辑吗?对不起,第二个
作为t1
应该是
作为t2
。语法错误在或接近“FROM”。我是在carto onlines web界面上的SQL编辑器中执行此操作的,如果这有任何区别的话。您确定您使用的是MySQL,而不是其他数据库吗?不确定他们在carto中使用的确切SQL版本。我看看能不能把它修好,让它工作起来