搜索

首页  >  问答  >  正文

从表中消除 a 列中具有重复值的行

有没有办法检查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粉366946380P粉366946380236 天前353

全部回复(1)我来回复

  • P粉441076405

    P粉4410764052024-04-01 09:38:34

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

    回复
    0
  • 取消回复