2015-03-31 56 views
0

我得到了2個表格,我保留位置信息和人員位置。我想找到那些沒有離開這個地方的人。所以我在這兩個表中都有客戶端ID和位置ID。在我的位置表中,我知道哪個地方在外面。下面的查詢給了我裏面的人。如果我使isOutside = 1,它給了我外面的人。所以問題是,一個人可以有條目,其中isOutside等於1或0。我怎麼能區分誰擁有isOutside值爲0,但沒有任何人進入其中isOutside等於1根據列值不同,在表格中不存在任何其他條目

SELECT DISTINCT(macID) 
FROM locations a, logs b 
WHERE b.location_id = a.id and b.client_id=1 and Date(b.lastLocatedTime) = '2015-01-16' 
and a.isOutside =0 and b.client_id = a.client_id 

更新

我寫了這個查詢哪些爲我工作。這與波希米亞的答案類似。

SELECT COUNT(DISTINCT macID) 
FROM logs 
WHERE location_id IN (SELECT id FROM locations WHERE isOutside = 0) AND client_id = 1 AND 
         DATE(lastLocatedTime) = '2015-01-16' AND macID NOT IN 
         (SELECT macID 
         FROM logs 
         WHERE DATE(lastLocatedTime) = '2015-01-16' AND 
         location_id IN (SELECT id FROM locations WHERE isOutside = 1)) 

回答

0

使用NOT IN測試:

SELECT DISTINCT(macID) 
FROM locations a 
JOIN logs b ON a.id = b.location_id AND a.client_id = b.client_id 
WHERE b.client_id=1 and Date(b.lastLocatedTime) = '2015-01-16' 
AND a.client_id NOT IN (SELECT client_id FROM locations WHERE isOutside = 1) 
+0

然而,我試過這個,即使它沒有顯示有isOutside值爲0的人,但這並不意味着他們在表中沒有isOutside值爲0。 – 2015-03-31 07:33:28

0

使用左連接外人並過濾掉連接,只留下業內人士:

SELECT DISTINCT l.macID 
FROM logs l 
JOIN locations a ON l.location_id = a.id 
    AND l.client_id = a.client_id 
    AND a.isOutside = 0 
LEFT JOIN (SELECT macId, l2.client_id, date(lastLocatedTime) lastLocatedDate 
      FROM logs l2 
      JOIN locations a2 ON l2.location_id = a2.id 
      AND l2.client_id = a2.client_id 
      AND a2.isOutside = 1) o 
    ON o.client_id = l.client_id 
    AND o.macID = l.macID 
    AND lastLocatedDate = Date(l.lastLocatedTime) 
WHERE Date(l.lastLocatedTime) = '2015-01-16' 
AND o.client_id IS NULL 
AND l.client_id = 1 

SQLFiddle

這裏,日誌是內部加入到位置找到所有內部人員,但後來外部連接d給外人,如果找不到將包含where子句選擇的所有空值(拒絕成功的加入)。

另外DISTINCT不是一個函數,所以不要編碼爲一個;即DISTINCT macID,而不是DISTINCT(macID)

+0

İt只顯示所有的macids,它沒有得到行只有isOutside值0 – 2015-03-31 07:43:25

+0

@AhmetTanakol好,它*應該*的工作。你確定你確實抄襲了我的查詢嗎?特別是連接類型(「連接」,然後「左連接」)。如果你有正確的拷貝我的查詢,並且它確實不起作用,請用你的模式和一些示例數據創建一個[SQLFiffle](http://sqlfiddle.com)。 – Bohemian 2015-03-31 18:46:09

+0

@Bohemianyes我複製完全你的查詢。我認爲,當你加入地點和日誌時,它會得到所有isOutside值爲0的人,但是在你離開後,它並不會消除那些是「Outside」值爲1.你在離開之前創建的單元格仍然可以有條目在第二個單元格中。 – 2015-04-01 06:16:58

相關問題