2016-02-14 69 views
0

我有2個表:設備表和用戶表。如果條件的MySQL查詢

設備表有2列:ID和MacAddress。
用戶表有4列:ID,名稱,電話,MacAddress。

將有一個固定的列表填充用戶表,例如:
1,史蒂夫標記,219-373-1485,5A:2B:3C:8D
2,丹商標,310-248-1455, 5C:3A:2B

每隔5分鐘,設備表將填充本地附近的MacAddresses和設備信息。

我想創建一個視圖,以便獲取設備表中重複兩次以上的MacAddresses的名稱和電話,並且在用戶表中存在相應的macaddress匹配。

謝謝!

山姆

+0

你對SQL有多熟悉?你之前用JOIN寫過查詢嗎? – Nicarus

回答

0

我瞭解你的用戶表中包含WLAN熱點例如所有用戶。並且設備列表包含在給定時間訪問熱點的所有mac地址。

什麼

SELECT name, macAddress, count(macAddress) 
FROM Device 
    INNER JOIN USER ON User.MacAddress = Device.MacAddress 
GROUP BY name, macAddress 
HAVING COUNT(macAddress) >= 2 

如果我明白你的用例的權利,我會建議增加一個時間戳列到設備表。因此,您已準備好要更改數據並能夠在所需時間段內進行選擇。例如。 「誰在10點和11點之間至少有2次訪問?」:

SELECT name 
FROM Device 
    INNER JOIN USER ON User.MacAddress = Device.MacAddress 
WHERE timestamp between '2016-02-14 10:00:00' and '2016-02-14 11:00:00' 
GROUP by name, macAddress 
HAVING COUNT(macAddress) >= 2 
ORDER BY name 
+0

謝謝大家爲您的輸入... dsteinkopf的答案爲我工作..謝謝! – sam

0

您可以使用此查詢

SELECT name,phone, MacAddress, COUNT(name) as total 
FROM user 
GROUP BY name 
HAVING (COUNT(name) > 1) 
+0

缺少一項要求:「我想創建一個視圖,以獲取在設備表中重複兩次以上的MacAddresses的名稱和電話,並且在用戶表中存在相應的macaddress匹配項」 – Nicarus

+0

不確定語法是正確的,但嘗試財產以後這樣的:SELECT MACADDRESS,姓名,電話 從設備爲d 通過MACADDRESS加盟的爲u 組 COUNT(d.MacAddress) HAVING(COUNT(d.MacAddress)> 1) – Latifah

0

您可以使用此查詢,以查找姓名和電話匹配macaddresses反覆兩次以上到設備表及其對應的MAC地址發現到用戶表。

select D1.Name, D1.Phone D1.MacAddress from User U 
join ( 
    select MacAddress from Device 
     group by MacAddress 
    having count(MacAddress) > 2) D on U.MacAddress = D.MacAddress 
join Device D1 on D1.MacAddress = D.MacAddress 

如果你需要找到它超過1次,簡單的改變

count(MacAddress) >= 2