MySQL左连接多个条件
我有两个表:A和B通过“组id”链接MySQL左连接多个条件,mysql,join,Mysql,Join,我有两个表:A和B通过“组id”链接 我使用的两个变量:$关键字,$\u会话['user\u id'] A 组id 关键词 B id 组id 用户id 我希望能够根据关键字搜索选择此用户不在的所有组 因此,我们的目标是选择用户id所在位置的所有行={$\u SESSION['user\u id'}对应于B中的组\u id,类似于关键字 这就是我所尝试的: SELECT a.* FROM a LEFT JOIN b ON a.group_id=b.group_id WHERE a.keywo
我使用的两个变量:
$关键字,$\u会话['user\u id']
A组id
关键词
B
id
组id
用户id
我希望能够根据关键字搜索选择此用户不在的所有组 因此,我们的目标是选择用户id所在位置的所有行={$\u SESSION['user\u id'}对应于B中的组\u id,类似于关键字 这就是我所尝试的:
SELECT a.*
FROM a
LEFT JOIN b ON a.group_id=b.group_id
WHERE a.keyword LIKE '%".$keyword."%'
AND b.user_id!=$_SESSION{['user_id']}
GROUP BY group_id
但是,除非我删除和b.user\u id!=$\u SESSION{['user\u id']}
,否则它不会找到任何行(匹配项),在这种情况下,它还将包括用户已经在其中的组-这不是我想要的
任何帮助都将不胜感激!谢谢只需将附加条件移动到连接条件中,这样就不需要存在b来返回结果
SELECT a.* FROM a
LEFT JOIN b ON a.group_id=b.group_id AND b.user_id!=$_SESSION{['user_id']}
WHERE a.keyword LIKE '%".$keyword."%'
GROUP BY group_id
正确答案很简单:
SELECT a.group_id
FROM a
LEFT JOIN b ON a.group_id=b.group_id and b.user_id = 4
where b.user_id is null
and a.keyword like '%keyword%'
这里我们正在检查user\u id=4
(会话中的用户id)。因为我们在连接条件中有它,它将为表b中与条件不匹配的任何行返回空值-即,该用户\u id不在其中的任何组
从这里开始,我们需要做的就是过滤空值,并且我们拥有您的用户不在的所有组
上述答案是正确的。实现这一点的另一种方法是
SELECT a.group_id
FROM a
LEFT JOIN b ON (a.group_id, b.user_id) = (b.group_id, 4)
where b.user_id is null
and a.keyword like '%keyword%'
感谢您的回复,但是,这不起作用。它只返回表“a”中的所有行,包括b.user\u id等于$\u会话['user\u id'的行]。我不知道为什么,但我认为这与它是一个左连接这一事实有关?我想你已经足够接近了,知道答案:)尝试使用内部连接而不是左连接没有内部连接不起作用。如果我使用内部连接,那么它只会从表a中提取表B中具有相应组id的行。我需要它来全部提取行s在表A中,除了B中的用户id=$\u会话['user\u id'](对于该特定组id)之外。
SELECT a.group_id
FROM a
LEFT JOIN b ON (a.group_id, b.user_id) = (b.group_id, 4)
where b.user_id is null
and a.keyword like '%keyword%'