避免返回多行

时间:2018-07-20 13:35:31

标签: mysql sql

我有三个表:reserva,cliente,estancia

reserva
___________
id
id_cliente
entrada
salida
...

cliente
__________
id
nombre
apellidos
telefono
dni
....

estancia
__________
id
id_cliente
id_reserva

其中cliente和reserva具有1对1关系。当前,我使用此查询。

SELECT r.id as rid,
       r.entrada as rentrada,
       r.salida as rsalida,
       c.nombre as cnombre,
       c.telefono as ctelefono,
       c.dni as cdni,
       c.apellidos as capellido
FROM reserva r INNER JOIN
     cliente c 
     ON r.id_mainclient = c.id
ORDER BY rid DESC

我需要添加estancia,它与reserva具有n对1的关系。 我需要的可能是使用group_concat(),这样我仍然可以获得id_clientes中的所有estancia,而不必复制行,而是将它们连接起来。

1 个答案:

答案 0 :(得分:1)

您可以使用group by来使用group_concat

  SELECT r.id as rid
    , r.entrada as rentrada
    , r.salida as rsalida
    , c.nombre as cnombre
    , c.telefono as ctelefono
    , c.dni as cdni
    , c.apellidos as capellido
    , group_concat(e.id_cliente)
  FROM reserva r 
  INNER JOIN cliente c on r.id_mainclient = c.id 
  INNER JOIN estancia e on r.id = e.id_reserva
  GROUP BY r.id
  ORDER BY rid DESC

或使用适当的分隔符并按

排序
SELECT r.id as rid
, r.entrada as rentrada
, r.salida as rsalida
, c.nombre as cnombre
, c.telefono as ctelefono
, c.dni as cdni
, c.apellidos as capellido
, group_concat(e.id_cliente ORDER BY e.id_cliente ASC SEPARATOR ' ')
FROM reserva r 
INNER JOIN cliente c on r.id_mainclient = c.id 
INNER JOIN estancia e on r.id = e.id_reserva
GROUP BY r.id
ORDER BY rid DESC

或者如果您还需要c.dni

  SELECT r.id as rid
    , r.entrada as rentrada
    , r.salida as rsalida
    , c.nombre as cnombre
    , c.telefono as ctelefono
    , c.dni as cdni
    , c.apellidos as capellido
    , group_concat(e.id_cliente ORDER BY e.id_cliente ASC SEPARATOR ' ')
    , group_concat(c.dni   SEPARATOR ' ')
  FROM reserva r 
  INNER JOIN cliente c on r.id_mainclient = c.id 
  INNER JOIN estancia e on r.id = e.id_reserva
  GROUP BY r.id
  ORDER BY rid DESC