繁体   English   中英

如果在表中多次找到 a 列中的相同值,则排除所有行

[英]Exclude all rows if same value in column a is found multiple times in a table

有没有办法检查 lead_id 是否在表中多次出现,如果是,则从查询中排除? 原因是,如果 status_id = 1 并且没有找到该 lead_id 的其他 status_id/行,我只想添加新行。

数据库的设计方式是为每个状态更新创建一个新行。 因此旧行具有较旧的时间戳并保留在数据库表中,这些将显示在状态历史组件的前端。 但是既然是这样设计的,我就不能简单的说:给每一个状态为1的用户,一个新的状态更新。 因为它会为每个 lead_id 添加一行,因为所有潜在客户都将以 status_id 1 进入数据库。

到目前为止我使用的查询:

INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`)
SELECT (`lead_id`, 13, "", `created_at`, `updated_at`)
WHERE `lead__status_id` = 1 AND 

数据是什么样的:

lead_id status_id 更多数据
1个 1个 数据
1个 12 数据
2个 1个 数据
2个 14 数据
3个 1个 数据
4个 1个 数据
5个 1个 数据
6个 1个 数据

对于每个新线索(表单提交),它将创建一行并为线索提供 status_id 1(状态:新)。 我确实需要将 200 多个潜在客户从 1 批量更新到另一个 status_id,但是根据我现在的查询,它将更新包含 status_id 为 1 的每一行。我想要的是它会首先检查 lead_id 是否仅存在在表中一次,如果为真,则添加一个具有更新后的 status_id 的新行。

所以在 sql 查询之后,它需要看起来像这样:

lead_id status_id 更多数据
1个 1个 数据
1个 12 数据
2个 1个 数据
2个 14 数据
3个 1个 数据
3个 12 数据
4个 1个 数据
4个 12 数据
5个 1个 数据
5个 12 数据
6个 1个 数据
6个 12 数据

TLDR:如果在表中只找到一次 lead_id,请添加带有 status_id 的新行。

如果您的表每行都有一个唯一的 ID,那么您可以使用这样的查询

INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`)
SELECT (`lead_id`, 13, "", `created_at`, `updated_at`)
FROM `lead_has_status` l
WHERE `lead__status_id` = 1 AND NOT EXISTS ( 
  SELECT 1 FROM lead_has_status 
  WHERE `lead_id` = l.`lead_id` AND id <> l.id );

没有身份证

INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`)
SELECT (`lead_id`, 13, "", `created_at`, `updated_at`)
FROM `lead_has_status` l
WHERE `lead__status_id` = 1 AND  () 
  SELECT COUNT(*) FROM lead_has_status 
  WHERE `lead_id` = l.`lead_id`) = 1 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM