Mysql 查询列a!=专栏B
我正在尝试选择ID='12-027-013'不是其一部分的组的组\u ID 我试过这个问题Mysql 查询列a!=专栏B,mysql,Mysql,我正在尝试选择ID='12-027-013'不是其一部分的组的组\u ID 我试过这个问题 SELECT DISTINCT groups.group_ID, groups.group_name FROM groups INNER JOIN group_member ON groups.group_ID = group_member.group_ID WHERE groups.group_name LIKE "%e%" AND group_member.ID != "12-027-013"
SELECT DISTINCT groups.group_ID, groups.group_name
FROM groups INNER JOIN group_member
ON groups.group_ID = group_member.group_ID
WHERE groups.group_name LIKE "%e%"
AND group_member.ID != "12-027-013"
但它仍然显示ID='12-027-013'已经属于的组
这些是我的桌子
表:小组
表:集团成员
这是我查询的结果
任何帮助都将不胜感激。谢谢。试试这个
SELECT DISTINCT
groups.group_ID,
groups.group_name
FROM groups
INNER JOIN group_member
ON groups.group_ID = group_member.group_ID
LEFT OUTER JOIN (SELECT group_id FROM group_member WHERE group_member.ID = "12-027-013") gm ON group_member.group_id=gm.group_id
WHERE groups.group_name LIKE "%e%"
AND gm.group_id IS null
试试这个:
SELECT DISTINCT groups.group_ID, groups.group_name
FROM groups INNER JOIN group_member
ON groups.group_ID = group_member.group_ID
WHERE groups.group_name LIKE "%e%"
AND group_member.ID NOT LIKE "%12-027-013%" //if the type of id is text
问题出在!=。它不应该像我认为最好的方法是简单的左连接: 这没有一个独特的查询,因此它的性能应该比原始查询好得多 不存在类似的替代方案:
这两个版本都可以使用groupsgroup\u name、group\u id和group\u membergroup\u id、id上的索引来获得最佳性能。结果仍然是一样的。它成功了!非常感谢你。虽然我想知道gm是什么意思。gm是子查询的临时表或内存表的名称。gm.group\U id在结尾处为NULL,减去包含问题id的组的记录,因此基本上gm指的是从group\U成员中选择group\U id,其中group\U member.id=12-027-013?是的,此子查询的执行结果集存储为内存表,我们给了它一个名称gm,以便在需要时访问它。非常感谢。我现在明白了。我从来不知道我能做到。
SELECT g.group_ID, g.group_name
FROM groups g LEFT JOIN
group_member gm
ON gm.group_ID = g.group_ID AND
gm.ID = '12-027-013'
WHERE g.group_name LIKE '%e%' AND
gm.group_ID IS NULL;
SELECT g.*
FROM groups g
WHERE g.group_name LIKE '%e%' AND
NOT EXISTS (SELECT 1
FROM group_member gm
WHERE gm.group_ID = g.group_ID AND
gm.ID = '12-027-013'
);