【问题标题】:Filter for SQL Results筛选 SQL 结果
【发布时间】:2020-06-29 05:04:39
【问题描述】:

我写了以下查询

SELECT *
FROM 
    (((SocialAndTags 
JOIN 
    SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialManagementTracker.SocialID)
JOIN 
    ProgramCategories ON SocialAndTags.ProgramCategoriesID = ProgramCategories.ProgramID)
JOIN 
    TagCategories ON SocialAndTags.TagCategoriesID = TagCategories.TagID) 
WHERE 
    InitialComment > '2020-03-16 00:00:00.999' 
    AND InitialComment < '2020-03-17 23:59:59.999'
ORDER BY 
    SMTrackerID DESC 

这执行没问题。

这是我的问题。我有 3 张桌子。 TagCategories 表保存 ID/标签名称。 SocialManagementTracker 保存项目和更多详细信息。 SocialAndTags 表有一个唯一的广告,并且正在提取 TagCategoriesSocialManagementTracker 的唯一 ID。

当用户为一个项目输入多个标签时,它会在 SocialAndTags 表中出现两次,这就是我设置它的方式。然后如何使用上述查询来过滤出重复的项目结果?

或者我是否倒退了,我应该在我的 SocialAndTags 表中添加另一列?

【问题讨论】:

  • 发布您的表结构、数据和所需的输出。
  • 如果你有适当的约束,就不能有“重复”。但是可以猜测您不管理自然键 - 而是所有内容都基于身份列。如果是这样,那么您需要调整架构(更好)或调整查询以适应架构问题。但是没有 DDL 和示例数据,没有人能告诉你。
  • 并去掉连接周围的括号——它们只会增加混乱和混乱。它们不是必需的。
  • 谢谢大家。由于爆发,我通常不会为另一个开发人员编写或使用 SQL。
  • @SM或者你是对的。一切都只是基于身份列。我将重新设计我的设置方式。

标签: sql sql-server sql-server-2005


【解决方案1】:

我查看了我的数据库,发现我引用了错误的外键。我还使用 DISTINCT 来获得所需的结果。

SELECT 
DISTINCT
SocialID, ProgramArea, Description, SocialURL, InitialComment, DaysToResolve, ResolutionDate FROM 
SocialAndTags 
JOIN SocialManagementTracker ON SocialAndTags.SMTrackerID = SocialManagementTracker.SocialID
JOIN ProgramCategories ON SocialAndTags.ProgramCategoriesID = ProgramCategories.ProgramID
WHERE 
InitialComment > '2020-03-16 00:00:00.999' 
AND InitialComment < '2020-03-17 23:59:59.999'
ORDER BY ResolutionDate, InitialComment DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多