2016-03-07 59 views
0

希望有人能帮助我解决这个问题。我的表看起来像这样:无法使用group by而无法检索数据,MySql

user_id query_id 
1   1 
1   2 
1   3 
2   4 
2   5 
4   6 

基本上为每个query_id链接到一个user.id,它可以是多对一的。

我一直在寻找的是除了第一个属于自己的相应的用户,或者所有的查询:

user_id query_id 
1   2 
1   3 
2   5 

这里是我的代码:

SELECT query_id FROM query WHERE query_id NOT IN 
(SELECT query_id FROM query GROUP BY user_id) 

通过使用组由功能我能够选择对应于每个用户ID的每个第一查询。但是,当我添加NOT IN时,我得到一张空桌子。我也试过左连接功能,但它也没有帮助。

我真的很感谢能帮助我的人。

回答

0

尝试这种情况:

SELECT user_id, query_id 
FROM mytable 
WHERE query_id NOT IN (SELECT MIN(query_id) 
         FROM mytable 
         GROUP BY user_id) 

子查询将基于所提供的采样数据中选择值(1), (4), (6)。因此,主查询将过滤掉所有具有这些query_id值的记录。

+0

您根据query_id是唯一 – sagi

+0

@sagi是的,因为OP说,它是一个*多对一关系。 –

+0

你是对的!从我眼中滑落。 – sagi

0

你可以这样说:

SELECT t.user_id,t.query_id 
FROM YourTable t 
WHERE EXISTS(SELECT 1 FROM YourTable s 
      WHERE s.user_id = t.user_id 
       AND t.query_id > s.query_id) 

或者:

SELECT t.user_id, t.query_id 
FROM YourTable t 
WHERE (t.user_id,t.query_id) NOT IN (SELECT s.user_id,MIN(s.query_id) 
            FROM YourTable s 
            GROUP BY s.user_id)