从表中消除 a 列中具有重复值的行
P粉366946380
P粉366946380 2024-03-31 10:42:26
0
1
388

有没有办法检查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 是否仅存在在表中一次,如果为 true,则添加具有更新的 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 的新行。

P粉366946380
P粉366946380

全部回复(1)
P粉441076405

如果您的表每行都有一个唯一的 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 );

并且没有 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 ;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板