mysql - 避免返回多行

标签 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() 这样我仍然可以在 estancia 中获取所有 id_clientes 而无需复制行,而是将它们连接起来。

最佳答案

您可以使用 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

关于mysql - 避免返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443763/

相关文章:

mysql - Laravel 5.1 - Homestead MySQL 连接。 `Connection Refused` & `No such file or directory`

php - 复杂的 Laravel 查询 leftjoin 一个查询

MySQL date_add REPEAT 循环错误

mysql - MyISAM 在性能上击败 InnoDB 的读/写比率是多少?

sql - 如何加载大量字符串与oracle数据库匹配?

sql - 如何根据特定条件查找表中的下一个值

mysql - 启动 mysql 查询 PHP

mysqldump 8 客户端使用 no-create-info 生成空的 .sql 文件

mysql - 将日期行转换为sql中的列

SQL Server 2008 R2 - 具有(移动)日期的动态透视/逆透视