Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso interrogare la tabella all'interno della tabella?

Puoi utilizzare una variabile per verificare se l'ultimo id è uguale all'id corrente e, in tal caso, emettere null o invece ''.

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

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

Nota, questo è un po 'hacky. Ho deliberatamente creato ClientId il secondo campo, in modo da poter modificare e restituire la variabile clientId nello stesso campo. In altri casi più elaborati, potrebbe essere necessario farlo in un campo separato. Ma per eliminare quel campo segnaposto dal risultato, dovrai incorporare l'intera query in una sottoselezione e definire i campi desiderati nell'ordine corretto nella query di livello superiore.