我有兩個表:從JOIN MySQL的排除結果
locations
---------------------
| id INT, PK, AI |
| x INT |
| y INT |
---------------------
signals
---------------------
| id INT, PK, AI |
| location_id INT |
| mac INT |
| strength INT |
---------------------
一個位置可以(將)具有多達最大4個信號。如果位置是X,則Y指向圖像,信號是X,Y範圍內的接入點以及它的信號強度。
無論如何,我有一個方法,我提供List
最多4個MAC地址,我需要找到包含這4個地址的所有locations
。
現在我編程這樣做的:
1.取頂部信號強度X,Y
和它的MAC地址
2. SELECT * FROM signals WHERE mac = ScanResult.BSSID
3.創建ID的數組返回signals.location_id
4.散裝如果他們的ID在陣列中,則選擇所有位置以及與這些位置相關的所有信號
5.循環中的複雜循環創建一個陣列,其中包含所有位於其關係中的位置,我在List
中提供的所有4個mac地址以及刪除其他。
這是令人難以置信的混亂,並有冗餘的查詢,但由於我不是很好的SQL它是一種工作的補丁。
現在我想知道是否可以單獨使用SQL並返回locations
包含這4個mac地址。
我:
SELECT locations.*, signals.* FROM locations INNER JOIN signals ON locations.id = signals.location_id;
我會少些困惑,如果我只需要排除的位置,其中的關係是1:1,但這裏的每個位置有多達4個信號。有沒有一種方法可以爲查詢提供一個「數組」,並從該JOIN
中刪除所有locations
不包含此數目的MAC地址和這些MAC地址。
這將返回任何具有任何MAC地址的位置。 OP希望具有所有提供的MAC地址的位置。 – Andomar