2012-11-12 55 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 :) –