查询特定案例条件

j7dteeu8  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(245)

正如标题所示,我遇到了一个特定的案例,或者两者都是我在这里逐字描述它,然后报告我的表的逻辑。例如:我们承认有一个活动,这个活动有一个客户参加,这个客户可以有一个或多个商店,参加这个活动。到目前为止没有什么奇怪的。在“事件”页面上,我有一个表格,其中显示了为我的客户订购的整个事件列表,如果有人想查看该事件的详细信息页面,他可以查看参与该事件的客户的商店以及所有特征,但我们仍然停留在显示与客户相关的所有事件的页面上。
我的问题是这个。
我创建了一个客户
我创建一个事件
我把商店和顾客联系起来
我转到事件页面
我什么都看得见
但是如果我从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的客户已经不存在了,我如何仍然显示其他信息,谢谢

ulmd4ohb

ulmd4ohb1#

如果从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 )在这里。
干杯

相关问题