【问题标题】:SQL Server 2005 Joining IssuesSQL Server 2005 加入问题
【发布时间】:2013-01-01 23:02:51
【问题描述】:

我有以下3个数据表

Options Table
UID (pk) SID (pk) TID (pk)
--------------------------
1        20       2
1        20       3
1        13       3
1        14       4

Types Table
TID (pk) TText
--------------------------
1        Text 1
2        Text 2
3        Text 3
4        Text 4

Sets Table
SID (pk)  SText
--------------------------
13        Set 13
14        Set 14
20        Set 20

我试图得到如下输出,选项表中只有 4 行,但其他 2 个表中的相应文本。我的加入似乎已关闭。

我想要的结果是:

UID (pk) SID (pk) TID (pk)  SText      TText
------------------------------------------------------
1        20       2         Set 20     Text 2
1        20       3         Set 20     Text 3
1        13       3         Set 13     Text 3
1        14       4         Set 14     Text 4

【问题讨论】:

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


    【解决方案1】:
    SELECT  a.*, b.Stext, c.TText
    FROM    Options a
            INNER JOIN Sets b
                ON a.SID = b.SID
            INNER JOIN  Types c
                ON a.TID = c.TID
    

    更新 1

    添加DISTINCT

    SELECT  DISTINCT a.*, b.Stext, c.TText
    FROM    Options a
            INNER JOIN Sets b
                ON a.SID = b.SID
            INNER JOIN  Types c
                ON a.TID = c.TID
    

    【讨论】:

    • 嗯,这就是我所拥有的,但我得到了六个结果
    • 我发现了我的问题。是我。我正在使用一个旧的测试数据库,其中 set 没有 PK 集并且有重复。将其设置为具有唯一数据的 PK 可以修复它。谢谢。
    【解决方案2】:
    SELECT O.UID,O.SID,O.TID,T.TText,S.SText
    FROM Options O
    INNER JOIN Types T ON
        T.TID = O.TID
    INNER JOIN Sets S ON
        S.SID = O.SID
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      SQLFIDDLE DEMO

      编辑:对 sql server 使用 distinct,因为第一个查询是用 mysql 编写的

      select distinct o.*, t.ttext, s.stext from 
          options o
          inner join 
          types t
          on o.tid = t.tid
          left join 
          sets s
          on s.sid = o.sid
          ;
      
      select o.*, t.ttext, s.stext from 
      options o
      inner join 
      types t
      on o.tid = t.tid
      left join 
      sets s
      on s.sid = o.sid
      group by o.uid, o.tid, o.sid
      ;
      
      | UID | SID | TID |  TTEXT |  STEXT |
      -------------------------------------
      |   1 |  20 |   2 | Text 2 | Set 20 |
      |   1 |  13 |   3 | Text 3 | Set 13 |
      |   1 |  20 |   3 | Text 3 | Set 20 |
      |   1 |  14 |   4 | Text 4 | Set 14 |
      

      【讨论】:

      • @Chris 请检查一下 :) group by 因为您使用的是 sql server(这是 mysql),所以您将不得不使用 distinct :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多