0

sso 我无法在标题中准确表达我需要什么。我对 mysql 很陌生首先,这是我目前使用的 sql 表http://dl.dropbox.com/u/37057843/P2_Scripts.sql

我将简要解释一下:我需要获得不止一次在(该)酒店中的客户,并且在每种类型的房间中至少一次。(检查下表的解释)

这些是表格:

  • reservas (reservations),其中包含预订的 ID (id)、预订的客户 ID (idCliente) 和房间号 (idHabita)。
  • 客户,客户表,其中包含他的 id、他的名字(名词)、他的姓氏(apellido)、他的地址和电话号码(最后两个没有使用)
  • habitaciones (rooms),其中包含房间号 (id)、以 m2 为单位的大小 (superficie)、一些无关紧要的东西,最后是价格的 id (idPrecio)。
  • precios (prices),其中包含条目的 id、房间类型 (tipo) 和价格 (precio)。TIPO 的价值可以是“个人”或“双重”。像个人或双人间。

所以基本上,

  • reservas.idCliente = clientes.id
  • reservas.idHabita = habitaciones.id
  • habitaciones.precio = precio.id

正如我之前提到的,我需要让客户在每种类型的房间中至少出现一次,所以基本上在单人房间一次或多次,在双人间一次或多次。

我知道这有点不好解释,但我不知道如何更好地解释它,很抱歉。

我目前正在使用此查询来获取单个房间中的人员(姓名、姓氏和房间编号)

SELECT c.nombre, c.apellidos, r.idHabita
FROM  clientes c, reservas r, precios p, habitaciones h
WHERE r.idCliente = c.id
AND r.idHabita = h.id
AND h.idPrecio = p.id
AND p.tipo LIKE 'individual'

而且我知道我必须执行某种类型的子查询来检查 p.tipo 是否也为“double”,但我就是无法正常工作。此查询返回的客户也与双人房中的客户相同。事实上,这些是曾经在一个单独的房间里的唯一的。但我需要一个查询来检查他们是否也在双人间。

提前感谢您的阅读!

4

2 回答 2

2

要获得“在每种类型的房间中至少出现一次”的客户,请将客户表与其关联的预订加入并按客户对结果进行分组 - 然后您需要那些具有相同数量的不同房间类型的组房间类型表,可以用一个HAVING子句表示:

SELECT   c.*
FROM     clientes     c
  JOIN   reservas     r ON r.idCliente = c.id
  JOIN   habitaciones h ON r.idHabita  = h.id
  JOIN   precios      p ON h.idPrecio  = p.id
GROUP BY c.id
HAVING   COUNT(DISTINCT p.tipo) = (
  SELECT COUNT(DISTINCT   tipo) FROM precios
)

sqlfiddle上查看。

于 2012-06-05T18:16:08.023 回答
0

这显示了每个符合条件的房间的行(每人多个房间 - 至少一个人和至少一个双人间) - 正是您要求的输出(顺便说一句,当他们帮助您时接受答案,否则人们将停止帮助您):

SELECT c.nombre, c.apellidos, r.idHabita
FROM clientes c
INNER JOIN reservas r
ON r.idCliente = c.id
INNER JOIN habitaciones h
ON r.idHabita = h.id
WHERE r.idCliente IN
(SELECT r1.idCliente
FROM clientes c1
INNER JOIN reservas r1
ON r1.idCliente = c1.id
INNER JOIN habitaciones h1
ON r1.idHabita = h1.id
INNER JOIN precios p1
ON h1.idPrecio = p1.id
WHERE p1.tipo = 'individual')
AND r.idCliente IN
(SELECT r2.idCliente
FROM clientes c2
INNER JOIN reservas r2
ON r2.idCliente = c2.id
INNER JOIN habitaciones h2
ON r2.idHabita = h2.id
INNER JOIN precios p2
ON h2.idPrecio = p2.id
WHERE p2.tipo = 'doble')
ORDER BY c.nombre, c.apellidos, r.idHabita

更新:刚刚添加了排序...

于 2012-06-05T18:13:39.960 回答