MYSQL - 从一个表中查找另一个表中不存在的记录

时间:2016-04-26 15:01:19

标签: mysql sql

我有以下两个SQL表(在MySQL中):

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">; <hibernate-mapping> <class name="com.telemune.demoPojo.CrbtSubMasterDemo" table="sdp.crbt_subscriber_master"> <id column="MSISDN" name="mobile" type="java.lang.String"> <generator class="native"/></id> </hibernate-mapping>

Users | id | name | |----|------| | 1 | Luke | | 2 | Mark | | 3 | Lucy | | 4 | Biff |

我想要用户类别中的用户,但是如果类别ID是6,则不是。

在这种情况下,Mark和Lucy因为Luke也属于6类而且Biff没有类别。

有一种方法可以在没有子查询且仅在一个查询中执行此操作吗?

2 个答案:

答案 0 :(得分:4)

您可以group by user_id并删除那些至少有一个category_id为6的行。

select uc.user_id,u.name
from user_category uc
join users u on uc.user_id = u.id
group by uc.user_id,u.name
having sum(case when category_id = 6 then 1 else 0 end) = 0

答案 1 :(得分:0)

加入他们并检查差异:

SELECT * FROM users 
INNER JOIN user_category ON (user_category.user_id = users.id) 
WHERE user_category.category_id <> 6

P.S。使用group by是无效的,因为它在收集数据后通过操作对DB引擎做了额外的组。