我有以下两个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没有类别。
有一种方法可以在没有子查询且仅在一个查询中执行此操作吗?
答案 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引擎做了额外的组。