【发布时间】:2021-07-20 12:36:21
【问题描述】:
我有两个 SQL Server 表:users_flags 和 users。
users:
| user_id | email_address |
|---|---|
| 1 | john@company.com |
| 2 | amy@company.com |
| 3 | john@company.com |
| 2 | amy@company.com |
users_flags:
| flag_id | user_id |
|---|
如何将users 表中的所有唯一 user_id 值插入users_flags 表,使用子查询按email_address 过滤?
例如,我有一个电子邮件地址列表,我需要检索user_id 用于:
SELECT user_id FROM users
WHERE email_address IN ('john@company.com',
'amy@company.com',
'guster@company.com')
通常,我会将其用作INSERT 语句的子查询(我需要对flag_id 进行硬编码):
INSERT INTO users (flag_id, user_id)
SELECT 3,
user_id
FROM users
WHERE email_address IN ('john@company.com',
'amy@company.com',
'guster@company.com')
但是,由于我的 users 数据集当前有一些重复数据,我只需要从该表中获取 DISTINCT user_id 记录。
我不能在我的子查询中对user_id 使用DISTINCT 关键字(语法无效)。如何更新我的 INSERT 语句以仅考虑唯一用户 ID?
【问题讨论】:
-
例如:子查询...
-
正确的sintax是
SELECT DISTINCT 3, user_id ...,你可能输入了SELECT 3, DISTINCT user_id... -
@JaimeDrq - 这正是我做错的,你是对的。谢谢!
-
有一些重复的数据修复它并应用适当的约束来防止它。不应避免数据质量问题,否则必须编写使用此信息的每个查询来解决此问题。
标签: sql sql-server