2012-11-12 84 views
0

我想運行一個查詢來返回客戶的姓和名,只有當他們用於會話的IP地址不同時。MySQL根據差異返回

例如:

Customer 1 makes Order on Session IP address: 192.168.12.1 
Customer 1 makes Order on Session IP address: 192.168.12.2 

Customer 2 makes Order on Session IP address: 192.168.12.3 
Customer 2 makes Order on Session IP address: 192.168.12.3 

Return Customer where IP address is not same (Customer 1) 

不過,我不知道如何來指定IP地址的差異。

我目前擁有的是:

Select Cust_First, Cust_Last 
FROM customer 

LEFT join Session 
On customer.cust_ID = session.Cust_ID 

LEFT join Order 
On session.Ses_ID = order.Session_ID 

Where Ses_IPAddress # Is different for the same customer? 

我會詳細的必要的字段的表:

Customer: 
PK: Cust_ID 
row: Cust_First 
row: Cust_Last 

Session: 
PK: Ses_ID 
FK: Cust_ID 
Row: Ses_IPAddress 

Order: 
PK: Order_ID 
FK Ses_ID 
+0

我的$ 0.02 - 嘗試按'Ses_IPAddress' – ajreal

回答

1

其實這個任務比你試圖完成它的方式更容易。只要選擇符合您的邏輯的客戶。

SELECT Cust_First, Cust_Last 
FROM Customer 
WHERE Cust_ID IN (
    SELECT Cust_ID 
    FROM Session 
    JOIN Order On Session.Ses_ID = Order.Ses_ID 
    GROUP BY Cust_ID, Session.Ses_IPAddress 
    HAVING COUNT(1) > 1 
) 
+0

它返回的項目,但它不工作了,如果IP地址是不同的? 只有當他們使用多個IP地址? – Wizard

+0

你的問題在「IP地址不同」部分不清楚。你是什​​麼意思?不同於什麼?請提供一個示例,然後我將嘗試調整我的查詢。是的,目前查詢的結果完全符合您在此評論中所說的內容。 –

+0

好的,我的意思是說,如果客戶已經在'IP地址:a'和'IP地址b'上下了訂單,則返回這些客戶的名字和姓氏? 在它返回第一個和最後一個名字即使爲了取ip地址從分「IP地址:a」和在其他時間的IP地址:一個「 我真的希望是更好? – Wizard

1

無法預測沒有看到源數據和輸出。可能是這個?

Select customer.Cust_First, customer.Cust_Last 
FROM customer 

LEFT join session 
On customer.Cust_ID = session.Cust_ID 

LEFT join order 
On session.Ses_ID = order.Session_ID 

GROUP BY customer.Cust_ID, session.Ses_IPAddress 
HAVING COUNT(*) > 1 
+0

COUNT(*)會導致你的麻煩,因爲它會嘗試引用不屬於域的'GROUP BY' –

+0

@AndriusNaruševičius我以爲只有having子句數由分組條款引起的分組事項。 – nawfal

+0

我不是100%關於這一個,最有可能你是對的,但我記得查詢哪裏COUNT(*)的行爲,所以我只是習慣於不使用asterix :) –