【问题标题】:How to find ID not in the master ID table如何查找不在主 ID 表中的 ID
【发布时间】:2013-03-08 02:05:42
【问题描述】:

假设我有一个 Products 主表,还有一个保存 ProductIDs 列表的表。

  Table name: Products  
 --------------------
 ProductID, Title, Price  
       1, Title 1, 12.00  
       2, Title 2, 15.00  
       4, Title 4, 11.50  
       8, Title 8, 13.89  
       11, Title 11, 12.00  

     Table name: ListOfProducts  
      --------------------------
       SomeID, ProductIDs  

         34, 4,8,1  
         35, 8,10,2  

现在,您可以看到在ListOfProducts 表中,记录为SomeID=35,产品列表为8,10,2。无效的ProductID 10不在主表Products中,如何使用SQL快速找出无效的ProductID 10

我的程序实际上是经典的ASP(旧版),数据库是MS SQL。我可以在 ASP 中循环遍历 ListOfProducts 中的记录,但是如何使用快速 SQL 查找任何无效的 ProductID?在这种情况下,当程序循环记录35时,脚本应该返回ProductID 10

这看起来很简单。但我只是想不出一个好的解决方案。这可以做到吗? 请帮忙!

谢谢。

【问题讨论】:

  • 阅读MySQL FIND_IN_SET()
  • 我实际上使用的是 MS SQL。 MS SQL 中是否有类似的功能?无论如何,我是新手,一些代码示例会很棒。谢谢。
  • 据我所知,MS-SQL 没有原生的拆分功能。
  • 阅读这篇文章@Aaron Bertrand。这就是您所需要的:Splitting Strings : Now with less T-SQL 但只有在您规范化表格之前。我建议你不要拖延走这条路。
  • 使用标准化数据库会容易很多:)

标签: php sql sql-server asp-classic


【解决方案1】:

您不应该将 ID 存储为逗号分隔的列表,这看起来更像是多对多关系。你应该有一个像这样的表:

SomeID | ProductID
-------------------
34     | 4
34     | 8
34     | 1
35     | 8
35     | 10
35     | 2

如果你真的必须使用逗号分隔的列表,那么你需要创建某种split function

【讨论】:

  • 不幸的是,ProductIDs 当前存储在一个列表中。
  • 没问题,解析列表,放入表格。不要仅仅因为“它就是这样完成的”就继续一个糟糕的设计,除非当然绝对没有其他选择。没有数据库管理员会建议您将列表存储在单个字段中。你看到的是一个糟糕的设计创可贴!快速修复不良标准化。
  • 我真的别无选择,只能继续使用它,因为这是更大计划的一部分。
猜你喜欢
  • 2012-03-23
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多