代码之家  ›  专栏  ›  技术社区  ›  cdeszaq Sudhir N

当文本字段是MS SQL Server 2000中返回字段的一部分时,如何选择不同的行?

  •  1
  • cdeszaq Sudhir N  · 技术社区  · 15 年前

    我有一个由数据库驱动的FAQ,它被组织成多个部分,我试图只为那些有相关问题/答案的部分获取部分数据。

    这是模式:

    |---------------------|      |----------------------|
    |       Section       |      |       Quest-Ans      |
    |---------------------|      |----------------------|
    | PK | id(int)        |<--|  | PK     | id(int)     |
    |    | title(varchar) |   |--| FK     | Sec_id(int) |
    |    | desc(text)     |      |        | body(text)  |
    |---------------------|      |----------------------|
    

    当我尝试此查询时:

    SELECT DISTINCT s.id, s.title, s.desc
    FROM Section as s INNER JOIN Quest-Ans as q ON s.id = q.Sec_id 
    

    我得到一个错误,说离散不能应用到一个文本字段。如何获取所需的数据?

    如果重要的话,这是一个sql2000数据库。

    编辑:


    好吧,看来有两种方法可以解决这个问题。在WHERE子句中使用EXISTS和子查询,或者在内部联接中使用子查询。哪个更快?

    4 回复  |  直到 15 年前
        1
  •  5
  •   cjk    15 年前

    应该这样做:

    SELECT s.id, s.title, s.desc
    FROM Section as s 
    WHERE EXISTS (SELECT * FROM Quest-Ans as q where q.Sec_id = s.id)
    
        2
  •  2
  •   kristof    15 年前
    select s.id, s.title, s.desc
    from Section s 
    inner join (select distinct sec_id from Quest-Ans) dqa on s.id = dqa.sec_id
    
        3
  •  0
  •   eKek0    15 年前

    试试看:

    SELECT s.Title, s.Desc
    FROM Section as s
    INNER JOIN (
      SELECT DISTINCT s.id
      FROM Section as s 
      INNER JOIN Quest-Ans as q ON s.id = q.Sec_id
    ) q ON s.Id = q.Id
    
        4
  •  0
  •   spart    11 年前

    尝试转换, 非重复转换(varchar(500),“文本字段”)