2009-04-02 11 views
1

J'ai une FAQ basée sur une base de données qui est organisée en sections et j'essaie d'obtenir les données de section pour seulement les sections qui ont une question/réponse qui leur est associée.Comment puis-je sélectionner des lignes distinctes lorsqu'un champ de texte fait partie des champs renvoyés dans MS SQL Server 2000?

Voici le schéma:

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

Lorsque je tente cette requête:

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

je reçois une erreur disant que DISCRET ne peut pas être appliquée à un champ de texte. Comment puis-je obtenir les données que je veux?

Si cela est important, il s'agit d'une base de données SQL2000.

EDIT:


Ok, il semble qu'il y ait deux façons d'aller à ce sujet. Soit avec EXISTS et une sous-requête dans la clause where, soit avec la sous-requête dans la jointure interne. Lequel est plus vite?

Répondre

5

Cela devrait le faire:

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) 
0

Essayez-le:

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 
+0

@ Ekeko - Cela devrait être SELECT DISTINCT s.id. –

+0

Renvoie une ligne pour chaque question. – cdeszaq

+0

@Lieven: Select renvoie un ensemble de lignes, et un ensemble n'a pas d'éléments de répétition et la jointure interne est faite en fonction de la clé (je suppose). Donc, distinct n'est pas nécessaire. – eKek0

2
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

+1: Cette requête me permet également de choisir parmi dqa – Divi

0

essayer CONVERT, CONVERT DISTINCT (VARCHAR (500), "champ de texte")