2013-01-07 28 views
0

這裏是架構:SQL查詢來獲取客戶提供超過一票

tblCustomers{custid,fname,lname,email} 
tblTicket{ticketId,custid,numOfPassengers,dateofJourney,totafare,trainId} 

問題查詢是:顯示所有誰已預訂超過一票的顧客。我正在使用Oracle 9.兩個表的custid之間都有一個外鍵。

回答

2

This?

SELECT C.custid 
FROM tblCustomers C 
    JOIN tblTickets T 
    ON C.custid = T.custid 
GROUP BY C.custid 
HAVING COUNT(*) > 1 

如果你想從tblCustomers使用這個有各個領域:

SELECT C.custid,C.fname,C.lname,C.email 
FROM tblCustomers C 
    JOIN tblTickets T 
    ON C.custid = T.custid 
GROUP BY C.custid,C.fname,C.lname,C.email 
HAVING COUNT(*) > 1 

SELECT 
     C.custid, 
     MAX(C.fname) as fname, 
     MAX(C.lname) as lname, 
     MAX(C.email) as email 
FROM tblCustomers C 
    JOIN tblTickets T 
    ON C.custid = T.custid 
GROUP BY C.custid 
HAVING COUNT(*) > 1 
+0

我們是否申請加入,如果這兩個表的客戶ID都已經通過外鍵鏈接? – Mahesha999

+0

您必須閱讀有關參照完整性。 '外鍵'告訴引擎只關於引用完整性。 –

1
select * 
from tblCustomers 
where custid in (select custid from tblTicket group by custid having count(*) > 1) 
+0

如果你只是想要客戶的身份證,那麼哈姆雷特的答案是最好的。如果你想看到客戶的詳細信息,那麼這將爲你做到這一點。 –

+0

是的,這也只適用於它應該是嵌套查詢tblTicket而不是tblCustomers。 – Mahesha999

+0

@ Mahesha999小細節:) –