【发布时间】:2020-09-26 03:55:59
【问题描述】:
我有两个关系,客户和地址。首先,我没有修改数据库的权限(比如为客户和地址创建新的信息)。 我需要的是,给定一个州列表,删除具有与该州相关的 Adress1 或 Adress2 的客户。 我在下面做的很慢,所以任何帮助都将不胜感激。
foreach (State state in listOfStates)
{
query =
"DELETE FROM CUSTOMER
WHERE EXISTS (
SELECT * FROM ADRESS
WHERE CUSTOMER.ADRESS1 = ADRESS.ID
AND STATE = " + state + ")";
cmd.CommandText = query;
cmd.ExecuteNonQuery();
query =
"DELETE FROM CUSTOMER
WHERE EXISTS (
SELECT * FROM ADRESS
WHERE CUSTOMER.ADRESS2 = ADRESS.ID
AND STATE = " + state + ")";
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
Customer
+----------+---------+---------+--+
| Name | Adress1 | Adress2 | |
+----------+---------+---------+--+
| John Doe | 1 | 2 | |
| Victor | 3 | 4 | |
| Renat | 5 | 6 | |
+----------+---------+---------+--+
Adress
+----+--------+------+------------+
| ID | Street | City | State |
+----+--------+------+------------+
| 1 | xxx | xxx | California |
| 2 | xxx | xxx | Florida |
| 3 | xxx | xxx | California |
| 4 | xxx | xxx | Ohio |
| 5 | xxx | xxx | Virginia |
| 6 | xxx | xxx | Colorado |
+----+--------+------+------------+
【问题讨论】:
-
我正在使用 c# 和 Access
-
SQL 命令真的正确吗?实际上,他们执行如下操作:“如果存在某些记录,则从表
customer中删除所有记录”。也就是说,这些查询总是删除所有客户。如果这确实是您想要做的,那么最快的方法是删除并重新创建表。 -
第一个查询删除 Adress1 与当前状态相关的客户。第二个做同样的事情,但使用 Adress2 。
-
@krokodilko:你错了。子查询与删除语句相关。它只检查客户的地址。因此,只有地址处于查找状态的客户才会被删除。
-
@krokodilko 不是,
DELETE FROM table1 WHERE (some condition involving table1)只会删除相关行。在这种情况下,过滤器确实涉及customer表,因此,只会删除相关行。
标签: c# sql database ms-access sql-delete