【发布时间】:2013-08-01 16:11:33
【问题描述】:
我有 2 张桌子:
“客户”和“地址”。一个客户可以有多个地址,因此它们具有“n:m”关系。 出于这个原因,我还有表“customer-addr”。
这就是我的表格的样子:
+---------------+
+-----------+ | customer_addr |
| customers | +---------------+ +-----------+
+-----------+ | id | | addresses |
| id | <---> | cid | +-----------+
| name | | aid | <---> | id |
+-----------+ +---------------+ | address |
+-----------+
我需要更新所有客户数据,包括。所有地址。出于这个原因,我考虑先删除所有现有地址,然后更新客户表,然后创建新地址。
我的问题:如何有效地删除一位客户的所有现有地址? (我必须从 2 个表中删除行)。
我可以使用单一语句吗? (没有cascade-method,风险太大)
或者我可以用 2 个语句而不使用子选择吗?
最好的方法是什么?
请注意,我使用的是 postgresql
编辑:
我的整个数据库设计更复杂,地址表不仅来自“客户”,还来自“供应商”、“bulkbuyers”,..
每个地址只属于一位客户或一位供应商或一位大宗采购商。 (没有地址被多个家长使用/没有地址共享)
客户/供应商/.. 可以有多个地址。
因此,来自 zebediah49 的已编辑解决方案将不起作用,因为它还会删除每个供应商/bulkbuyer/...的所有地址。
【问题讨论】:
-
如果都是数据,你不能把
customer_addr和addresses的全部内容都扔掉吗?编辑:好的,你想要一个客户。编辑解决了我的问题;谢谢。 -
我只想删除一个特定客户的数据。而且我只知道客户的id
-
地址可以属于2+客户吗?
-
在您完成所有这些操作后,您希望您的数据有何不同?
-
@Dan Bracuk:每次操作后,可能会发生以下变化:(1)客户数据(例如其他客户名称)(2)地址数据(例如其他街道)( 3)新地址添加(4)旧地址删除(5)1-4的组合。因此,在此操作之后,与客户相关的所有内容都可能发生变化
标签: sql postgresql foreign-keys sql-delete