sql - 从联合中获取每个 ID 的单个记录
问题描述
我在一张表中存储了 100 条广告文本,它们可以是预定的,也可以是默认的。我想为每个 cust_id 返回一条记录。
我有两个选择 sql 查询 - 第一个检查客户是否有预定的文本,第二个获取默认值。
SELECT
id, cust_id
FROM
texts
WHERE
over18 = FALSE
AND now()
BETWEEN ad_start_date
AND ad_end_date)
UNION ALL (
SELECT
id, cust_id
FROM
texts
WHERE
over18 = FALSE
AND texts.default = TRUE
ORDER BY
created_at DESC)
问题是第二个选择为每个 cust_id 返回多个记录。
解决方案
如果您需要基于集合的结果,那么您应该使用UNION
而不是UNION ALL
. 你可以在这里阅读更多关于它们的区别。另一种方法是使用该DISTINCT
子句。
推荐阅读
- asp.net-mvc - .NET MVC DisplayModeProvider 回退
- pagination - 如何使用 Github Pages 在 Jekyll 中对类别进行分页?
- ios - 在 swift 5 中使用未定义类型“MPMediaPickerControllerDelegate”
- windows - /var/run/docker.sock 如何适用于 Windows Docker?
- javascript - Vue webpack 构建 - 失败。您可能需要适当的加载程序来处理此文件类型
- python - 如何从列表中的所有元素中除以范围(1,16)中的数字 NumList = [2,4]
- flutter - 为什么第 9 行出错 The Value of field _maintext is not used?
- react-native - 不变违规:无效的 Hooks 调用。Hooks 调用只能在函数组件内部进行
- c# - 如何为 Swagger UI 的 [FromQuery] 参数定义默认值?
- dictionary - 实现mapTree函数