Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich eine Tabelle innerhalb einer Tabelle abfragen?

Sie können eine Variable verwenden, um zu prüfen, ob die letzte ID gleich der aktuellen ID ist, und in diesem Fall stattdessen null oder '' ausgeben.

select
  case when c.ClientId <> @clientid then c.Name else '' end as ClientName,
  case when c.ClientId <> @clientid then @ClientId := c.ClientId else '' end as ClientId,
  p.ContactId,
  p.Name as ContactName
from
  Clients c
  inner join Contacts p on p.ClientId = c.Clientid
  , (select @clientid := -1) x
order by
  c.ClientId, p.ContactId

Beispiel:http://sqlfiddle.com/#!2/658e4c/6

Beachten Sie, dass dies ein bisschen hacky ist. Ich habe ClientId absichtlich zum zweiten Feld gemacht, damit ich die clientId-Variable im selben Feld ändern und zurückgeben kann. In anderen, komplizierteren Fällen müssen Sie dies möglicherweise in einem separaten Feld tun. Aber um dieses Platzhalterfeld aus dem Ergebnis zu entfernen, müssen Sie die gesamte Abfrage in eine Unterauswahl einbetten und die gewünschten Felder in der richtigen Reihenfolge in der Abfrage der obersten Ebene definieren.