Mysql 连接表本身

Mysql 连接表本身,mysql,join,Mysql,Join,我现在试图弄明白这背后的逻辑,已经伤到了我的大脑 我有一张桌子如下 entry_id | cat_id 1 | 233 1 | 234 1 | 678 2 | 235 2 | 453 2 | 21 3 | 234 3 | 123 是否有一种方法可以在单个查询中返回与相同条目id关联的每个类别id。因此,select语句将基于cat_id进行选择,例如234。将返回的是类别ID: 23

我现在试图弄明白这背后的逻辑,已经伤到了我的大脑

我有一张桌子如下

entry_id | cat_id
       1 | 233
       1 | 234
       1 | 678
       2 | 235
       2 | 453
       2 | 21
       3 | 234
       3 | 123
是否有一种方法可以在单个查询中返回与相同条目id关联的每个类别id。因此,select语句将基于cat_id进行选择,例如234。将返回的是类别ID:
233、678、123

你是说233、234和678吗?@攀登:不,233、678和123似乎是对的。除非他还想要他正在搜索的234的id。啊,我错过了234也是条目3的一部分,这就是为什么我感到困惑。继续对@op.@Quassnoi提供的数据进行此查询将失败:为什么会失败?因为他使用了“=”而不是in。Equal只表示一个值。@Rocket:因为子查询将返回多行。@Nikki9696:是的,正是出于这个原因。看到OP想要什么,应该选择DISTINCT t2.cat_id,不是吗?@ypercube:可能是,也可能不是,我们不清楚。也许他会想计算分类或其他方面的匹配。你做到了,虽然Eugene在快速性方面比你领先一点,但这个查询对我的数据库的作用要快得多。我不知道正确回答的礼仪,因此,如果我本该将你标记为正确答案,尤金,我道歉:P@macgyver:由于两者都给出了正确的结果,您可以对两者进行投票。
select t1.* 
from yourtable t1
join yourtable t2 on (t1.entry_id=t2.entry_id and t1.cat_id<>t2.cat_id)
where t2.cat_id=[your cat]
SELECT cat_id FROM table
  WHERE entry_id IN (SELECT entry_id FROM table WHERE cat_id = 234)
AND cat_id <> 234
SELECT  t2.cat_id
FROM    mytable t1
JOIN    mytable t2
ON      t2.entry_id = t1.entry_id
        AND t2.cat_id <> t1.cat_id
WHERE   t1.cat_id = 234