2017-03-08 59 views
0

巧合。有兩位同姓的客人在晚上住過酒店嗎?顯示姓氏和兩個名字。不要包含重複項。困惑如何去查詢..自己加入或通過子查詢?

CLICK HERE FOR THE ER DIAGRAM

的結果應該是以下格式

+-----------+------------+-------------+ 
| last_name | first_name | first_name | 
+-----------+------------+-------------+ 
| Davies | Philip  | David T. C. | 
| Evans  | Graham  | Mr Nigel | 
| Howarth | Mr George | Sir Gerald | 
| Jones  | Susan Elan | Mr Marcus | 
| Lewis  | Clive  | Dr Julian | 
| McDonnell | John  | Dr Alasdair | 
+-----------+------------+-------------+ 
+2

如果有超過兩位姓氏相同的客人,該怎麼辦?你有什麼嘗試?你有什麼問題? – Ilion

+0

他們cant ..因爲我給出的結果格式是實際的答案 – goonernike

+0

我試圖通常加入和即時獲得兩個名字相同的名稱.. – goonernike

回答

0

您將需要一個自聯接加入表自我和DISTINCT子句來刪除重複。

SELECT DISTINCT g1.last_name, g1.first_name, g2.first_name 
FROM Guests g1 
     INNER JOIN 
    Guests g2 
     ON g1.last_name = g2.last_name 
+0

noo..its顯示重複值 – goonernike

1

下面正確的解決方案附:

SELECT DISTINCT c.last_name, c.first_name,d.first_name 
    FROM booking a 
     JOIN booking b ON a.booking_date <= b.booking_date AND DATE_ADD(a.booking_date, INTERVAL (a.nights -1) DAY) >= b.booking_date AND a.booking_id != b.booking_id 
     JOIN guest c ON c.id = a.guest_id 
     JOIN guest d ON d.id = b.guest_id 
    WHERE concat(a.guest_id, '_', b.guest_id) IN 
     (
     SELECT concat(a.id, '_', b.id) 
     FROM guest a 
      JOIN guest b ON a.last_name = b.last_name AND a.first_name > b.first_name 
     ) 
    ORDER BY 1 

它採用自我 - 參加兩次。第一次獲得包含在給定的傍晚發生的預訂的所有對的表格。從所有對中,我只選擇那些客人分享相同姓氏的人(這裏我使用第二次自我加入)。