[英]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.