代码之家  ›  专栏  ›  技术社区  ›  Maestro1024

是否可以查询这些表?

sql
  •  0
  • Maestro1024  · 技术社区  · 14 年前

    我有一张像这样的桌子。我想得到数据

    1.2,“我的名字是”,1.6,“厄尔”,12345,“摇滚乐真棒”

    我认为这个模式不可能,但我想看看我是否错了。我尝试了交叉联接,但得到的可能性不仅仅是实际值。

    应该完成的是,值表被写了很多次(对于一吨值),但是描述表具有唯一的静态值,通过将它们放在一个单独的表中,它们不会被反复地写。

    Values Table
    Column names = DataID1|DataID1Value|DataID2|DataID2Value|DataID3|DataID3Value
    Row values   = 1        1.2          2       1.6         3        12345
    
    Description Table
    Column names = DescriptionID1|Description
    Row value   = 1               "My name is"
    Row value   = 2               "Earl"
    Row value   = 3               "Rock Hard Awesome"
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Lieven Keersmaekers    14 年前

    这个怎么样?

    SELECT DISTINCT v.DataID1Value, d1.Description, 
                    v.DataID2Value, d2.Description, 
                    v.DataID3Value, d3.Description
      FROM Values v
      INNER JOIN Description d1 on d1.DescriptionID = v.DataID1
      INNER JOIN Description d2 on d2.DescriptionID = v.DataID2
      INNER JOIN Description d3 on d3.DescriptionID = v.DataID3
    
        2
  •  0
  •   HLGEM    14 年前

    我个人不会这样存储数据。您所拥有的基本上是一个查阅表格,它与只插入一列的许多列相关联。因此,对于要查看其描述的每一列,您都必须加入到它中。这是可能的,但会导致可怕的性能问题,因为这个表将成为一个锁定的噩梦。

    如果有不变的静态值,请向上查找它们(如果您想在表单上显示,请使用它们进行下拉),然后在插入时将它们存储在“值”表中。然后您只能查询一个表。

    然后去阅读EAV表以及它们是什么问题,以及为什么它们在数据库设计方面技术不好。

    这就是查询当前表的方法。请注意,您多次加入它,以获得每个值所需的信息。当有多个连接到同一个表时,d1、d2、d3是需要的不同别名。

      SELECT DISTINCT v.DataID1Value, d1.Description,  
                    v.DataID2Value, d2.Description,  
                    v.DataID3Value, d3.Description 
      FROM Values v 
      INNER JOIN Description d1 on d1.DescriptionID = v.DataID1 
      INNER JOIN Description d2 on d2.DescriptionID = v.DataID2 
      INNER JOIN Description d3 on d3.DescriptionID = v.DataID3