我有一张这样的表:
id | id_user | approved
-----------------
1 | 15 | 1
2 | 11 | 1
3 | 15 | 1
4 | 11 | -1
5 | 6 | 1
我想只在每个id_users批准的每个id_users等于1时选择id_user的distict值。 输出:
id | id_user | approved
-----------------
1 | 15 | 1
2 | 6 | 1
如您所见,未选择id_user 11,因为一个允许的值等于-1。我怎么能在mysql中做到这一点?
我已经尝试了SELECT * FROM table WHERE approved != -1 GROUP BY id_user
,但显然它没有用,所以我决定在这里问这个问题。
非常感谢你的时间。
//稍后编辑
我还有一个问题。我必须修改查询。我还有一张桌子
validation
id | id_user | valid
--------------------
1 | 15 | 1
我必须加入另一张桌子,但有条件。例如,假设您的查询输出(正确):
id | id_user | approved
-----------------
1 | 15 | 1
2 | 6 | 1
我想要的是加入这两张桌子:
LEFT JOIN (SELECT va.id_user,va.valid FROM validation va WHERE va.valid != 1) t2
ON t2.id_user = t1.id_user
但仅选择有效值不等于1的那些行。id_user
表中可能不存在第一个表中的validation
。在这种情况下,查询应该返回Alex的查询输出的确切内容。
让我举个例子。第一张表是相同的:
id | id_user | approved
-----------------
1 | 15 | 1
2 | 11 | 1
3 | 15 | 1
4 | 11 | -1
5 | 6 | 1
6 | 6 | 1
validation
表:
id | id_user | valid
--------------------
1 | 15 | 1
查询应输出:
id | id_user
------------
1 | 6
id_user = 15位于带valid=1
的第二个表格中,因此不会被选中
id_user = 11在已批准字段中的值为-1,因此不会选中
id_user = 6在两个已批准的字段中都有1,但在第二个表中不存在,我希望它被选中。
答案 0 :(得分:2)
这是我的方法: http://sqlfiddle.com/#!9/607e16/2
SELECT *
FROM t1
GROUP BY id_user
HAVING COUNT(*)=SUM(approved)
它不会像您所描述的那样返回精确的结果集。但事实上你只需要
SELECT id_user
FROM t1
GROUP BY id_user
HAVING COUNT(*)=SUM(approved)
因为htereis没有规则,返回id
或approved
并不重要。
请注意,只有approved
1, 0, -1
只有2,3,4,... etc
,如果值validation
此解决方案不起作用,此解决方案才有效。
更新根据您的第二个问题,您可以通过以下方式加入SELECT t1.*
FROM t1
LEFT JOIN validation v
ON v.id_user = t1.id_user
GROUP BY t1.id_user
HAVING COUNT(*)=SUM(approved)
AND SUM(v.valid) IS NULL
表:
http://sqlfiddle.com/#!9/96b4b/1
jQuery("#myul > li").click(function(){
alert('hey!');
});