正如标题所示,我遇到了一个特定的案例,或者两者都是我在这里逐字描述它,然后报告我的表的逻辑。例如:我们承认有一个活动,这个活动有一个客户参加,这个客户可以有一个或多个商店,参加这个活动。到目前为止没有什么奇怪的。在“事件”页面上,我有一个表格,其中显示了为我的客户订购的整个事件列表,如果有人想查看该事件的详细信息页面,他可以查看参与该事件的客户的商店以及所有特征,但我们仍然停留在显示与客户相关的所有事件的页面上。
我的问题是这个。
我创建了一个客户
我创建一个事件
我把商店和顾客联系起来
我转到事件页面
我什么都看得见
但是如果我从customer表中删除我注册的customer(第1项),那么与事件相关的整个表都将消失。
相反,我希望即使客户被取消,与该客户相关的事件也不会消失,只是缺少该客户姓名的数据。
我用这个简单的例子来说明我的问题是什么,现在我报告表和下面的查询
客户表名称:clienti
CREATE TABLE `clienti` (
`cliente_id` int(11) NOT NULL,
`nome` varchar(255) NOT NULL,
`cognome` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`telefono` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
事件表的名称:campagne\u cliente
CREATE TABLE `campagne_cliente` (
`id_campagna_cliente` int(11) NOT NULL,
`cliente_id_campagna` int(11) NOT NULL,
`impianto_id_campagna` int(11) NOT NULL,
`nome_campagna_cliente` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其中impianto\u id\u campagna是产品(商店)的id
表事件名称的id和持续时间:campagne
CREATE TABLE `campagne` (
`id_campagna` int(11) NOT NULL,
`data_inizio` date NOT NULL,
`data_fine` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我唯一忽略的部分是商店(产品),因为我不关心的是理解作为一个例子,这个过程是我已经创造了我所有的产品。
我创建了一个customer,并且在clienti表中有信息
我创建了一个开始和结束事件,然后转到campagne表
将客户与一种或多种产品联系起来,然后与客户一起用餐
并使用此查询显示全部:
"SELECT DISTINCT nome_campagna_cliente
, nome
, cognome
, telefono
, email
, cliente_id
, data_inizio
, data_fine
, id_campagna_cliente
FROM clienti
JOIN campagne_cliente
ON campagne_cliente.cliente_id_campagna = clienti.cliente_id
JOIN campagne
ON campagne.id_campagna = campagne_cliente.id_campagna_cliente
GROUP BY campagne.id_campagna"
现在我在campagne\u客户桌上有一个标准的箱子
- id_campagna = id of event
- cliente_id_campagna = id of customer
- impianto_id_campagna = id of products
示例:
- id_campagna = 10
- cliente_id_campagna = 30
- impianto_id_campagna = 42
如果我转到clienti表并删除customer id=42
通过我上面写的查询,即使id为42的客户已经不存在了,我如何仍然显示其他信息,谢谢
1条答案
按热度按时间ulmd4ohb1#
如果从clienti中删除记录,则需要写入:
当你使用外键时,你应该看看外键(尤其是像
ON DELETE SET NULL
)在这里。干杯