Możesz użyć tylko jednej tabeli, która zawiera pole ParentID. Jeśli rekord nie ma wartości, jest to komentarz, w przeciwnym razie jest to odpowiedź (na komentarz lub odpowiedź).
Możesz zapytać o rekord ParentID rekordu (sprawdź to ParentID), aby sprawdzić, czy ta odpowiedź dotyczy komentarza, czy odpowiedzi.
Edytuj :Powyższe jest dość praktycznym rozwiązaniem. Jednak, aby przejść do wersji znormalizowanej, nadal zachowaj jedną tabelę Komentarze (bez identyfikatora nadrzędnego) i utwórz tabelę ReplyTo, która ma CommentID i ResponseID, które są identyfikatorami rekordów w tabeli Komentarze.
Korzystając z tego pomysłu, następujący sql pokaże komentarze i "odpowiedź" na każdy komentarz dla każdej odpowiedzi, która ma komentarz:
select c.comment, r.comment as reply
from comment as c, comment as r, replyto as rt
where c.ID = rt.CommentID
and r.ID = rt.ReplyID
Jak wskazuje Dimitrii, nie wyświetla komentarzy bez odpowiedzi - do tego potrzebne jest zapytanie o złącze zewnętrzne (nie testowano składni):
SELECT c.comment, r.comment as reply,
from Comment c
left outer join Comment r on c.id = r.id
left outer join replyto rt on rt.responseid = r.id