正如标题所示,我遇到了一个具体案例,或者在这里我都逐字描述了两者,然后报告了表的逻辑。 例: 我们承认有一个活动,一位顾客参加了此活动,并且该顾客可以有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_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_id_campagna是产品(商店)的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;
我唯一忽略的部分是商店(产品),因为我不在乎是作为一个例子来理解,过程是我已经创建了所有产品。
我创建了一个客户,并且在clienti表中有该信息
我创建了一个开始和结束事件,然后转到活动表
将客户与一种或多种产品相关联,然后转到表格campagne_cliente
并显示以下所有查询:
"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_cliente表中有一个标准案例
- 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表并删除客户ID = 42
使用我在上面编写的查询,即使该ID为42的客户不再存在,我仍如何显示其他信息
答案 0 :(得分:0)
如果您从clienti中删除记录,则需要输入:
SELECT DISTINCT nome_campagna_cliente
, nome
, cognome
, telefono
, email
, cliente_id
, data_inizio
, data_fine
, id_campagna_cliente
FROM clienti
RIGHT OUTER JOIN campagne_cliente
ON campagne_cliente.cliente_id_campagna = clienti.cliente_id
RIGHT OUTER JOIN campagne
ON campagne.id_campagna = campagne_cliente.id_campagna_cliente
GROUP BY campagne.id_campagna
在查看时,您应该查看外键(尤其是ON DELETE SET NULL
)here。
欢呼