Offensichtlich habe ich Ihr Schema nicht gesehen, aber ich glaube nicht, dass Sie die Sub-Auswahl überhaupt brauchen. Es scheint, dass es dasselbe wie GroupOfArticles.Name
zurückgeben würde?
SELECT
Articles.Name,
GroupOfArticles.Name
FROM
Articles JOIN GroupOfArticles
ON Articles.Group = GroupOfArticles.ID
AND GroupOfArticles.ParentGroup = Articles.Group
Tatsächlich nimmt das oben dass jeder Artikel Teil einer spezifischen Gruppe sein zurückgegeben wird, und wird auch eine übergeordnete Gruppe aufweist, die die gleiche ist. Inception?
EDIT Basierend auf mehr Anforderungen/Informationen, ist hier eine zweite Version:
SELECT DISTINCT
a.Name,
g.Name
FROM
GroupOfArticles g INNER JOIN GroupOfArticles g1
ON g1.ParentGroup = g.ID
INNER JOIN Articles a ON
CASE
WHEN g.ParentGroup IS NULL THEN g.ID
ELSE g1.ID
END
Ich habe auch eine SQLFiddle für das oben.
EDIT 2 Eine alternative Version, die nicht JOIN
OR CASE
enthält:
SELECT DISTINCT
a.Name,
g.Name
FROM
Articles a, GroupOfArticles g, GroupOfArticles g1
WHERE
g.ID <> g1.ID
AND g.ParentGroup IS NULL
AND
(
a.Group = g.ID
OR a.Group = g1.ID AND g1.ParentGroup = g.ID
)
SQLFiddle
Beachten Sie, dass in den letzten beiden Abfragen, können Sie die DISTINCT
Schlüsselwort mit GROUP BY a.Name HAVING COUNT(*) > 0
ersetzen könnte, wenn Sie müssen diese Konstrukte auch wirklich verwenden. Entfernen Sie einfach DISTINCT
von der Spitze und fügen Sie die GROUP BY ...
am Ende hinzu.
Können Sie einige Daten für die zwei Tabellen in Ihrer tatsächlichen Frage zusammen mit der erwarteten Ausgabe anzeigen? –