Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询列a!=专栏B_Mysql - Fatal编程技术网

Mysql 查询列a!=专栏B

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"

我正在尝试选择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"
但它仍然显示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'
                 );