2012-06-05 57 views
0

sso我無法準確表達我在標題中需要的內容。我對mysql很陌生 首先,這是我正在使用的sql表格http://dl.dropbox.com/u/37057843/P2_Scripts.sql檢查客戶端是否在表格中出現多次

我會簡單地解釋一下:我需要獲取在酒店中不止一次的客戶端並且在每種類型的房間中至少一次。 (檢查下面的表的說明)

這些是表:

  • 飯店預訂(保留),包含預約(ID)的ID,所述客戶端(idCliente),該保留的ID和房間號碼(idHabita)。
  • 客人表,包含他的身份證,他的名字(nombre),他的姓(apellido),他的地址和電話號碼(最後兩個不使用)的客戶表
  • habitaciones(房間)其中包含房間號碼(id),以m2爲單位的大小(superficie),幾件不重要的事情,最後是價格的id(idPrecio)。
  • precios(價格),其中包含條目的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' 

的人(姓名,姓氏&室NR),我知道我必須做一些類型的子查詢到檢查p.tipo是否也是'雙',但我只是不明白它的工作。 此查詢返回的客戶端也是雙室中的客戶端。事實上,這是唯一一個在單獨房間裏的人。但我需要一個查詢來檢查他們是否在雙人房間。

在此先感謝您的閱讀!

+0

不要忘記接受答案,如果它幫助你,作爲對其他人的基本禮貌...... –

回答

0

這顯示每個符合條件的房間(每個房間多個房間 - 至少有一個人和至少一個doble)的行 - 正是您要求的輸出(順便說一下,當他們幫助您時接受答案,否則人們將停止幫助你):

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 

UPDATE:剛添加排序...

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

+0

非常感謝。雖然我不太明白那裏發生了什麼,但我會研究它,最終我會理解它:)! – zaakun

+0

@zaakun:如果有什麼關於我不明白的答案,請隨時在此澄清。 :) – eggyal

+0

@eggyal這個確實顯示了所有符合條件的人,但也沒有顯示他們的預訂記錄(無法看到他們留在哪個房間) - 但是對於sqlfiddle而言+1 +1 –

相關問題