mysql - 根据列值区分表,表中不能有任何其他条目

标签 mysql sql

我有两张表,用来保存位置信息和人员的位置。我想找到那些在里面而不离开这个地方的人的行。所以我在两个表中都有客户 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

更新

我写了这个对我有用的查询。这与 Bohemian 的答案类似。

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)

关于mysql - 根据列值区分表,表中不能有任何其他条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29362351/

相关文章:

mysql - 检索包含不止一次一起出现的 object_id 列表的列和包含它出现次数的计数的第二列

python - 使用 session.query 通过 SQLAlchemy ORM 更新连接表

mysql - Max 和 AVG MYSQL INNER JOIN 用于 2 个表

mysql - 无法在linux centos 7版本上安装percona mysql

php - 管理关系 SQL 数据的最便宜的方法

sql - 如何使用分层查询获取与条件匹配的行

mysql永久准备语句

mysql - Mariadb except 语句错误

Java 连接到 SQL Server

sql - 如何创建oracle程序将数据导出到历史表中?