我正在尝试修改我的另一个表的表,该另一个表的ID是该另一个表与另一列一起使用,仅当该列的数据为2时才采取该表的ID,并在我想要的那个中使用进行更改,例如: 但是QuestData也有很多数据和表格Quest,我该怎么做? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有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))
使用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)
对局外人使用左联接并过滤联接,只留下局内人:
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
在这里,日志是内部连接到位置以查找所有内部人员,然后外部连接到外部人员,如果未找到,将包含where子句选择的所有空值(拒绝成功的连接)。
而且DISTINCT
不是函数,因此最好不要将其编码为一个函数。 即DISTINCT macID
,不是DISTINCT(macID)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.