Как выбрать отдельные строки, если текстовое поле является частью возвращаемых полей в MS SQL Server 2000? - PullRequest
1 голос
/ 02 апреля 2009

У меня есть 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 

Я получаю сообщение о том, что DISCRETE нельзя применить к текстовому полю. Как я могу получить данные, которые я хочу?

Если это имеет значение, это база данных SQL2000.

EDIT:


Хорошо, похоже, есть два способа сделать это. Либо с EXISTS и подзапросом в предложении where, либо с подзапросом во внутреннем соединении. Что быстрее?

Ответы [ 4 ]

5 голосов
/ 02 апреля 2009

Это должно сделать это:

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 голосов
/ 02 апреля 2009
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
0 голосов
/ 05 июня 2013

попробуйте CONVERT, DISTINCT CONVERT (VARCHAR (500), «текстовое поле»)

0 голосов
/ 02 апреля 2009

Попробуйте:

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
...