2016-11-22 46 views
1

所有行或场我有两个表:MySQL的 - 选择其中不存在等于值

G1:

id | name | 
1 | G1 | 
2 | G2 | 
3 | G3 | 
4 | G4 | 
5 | G5 | 

g_u_groups:

id | group_id | action | 
1 | 2  | view | 
2 | 3  | add | 
3 | 2  | view | 
4 | 3  | view | 
5 | 1  | add | 

我有以下查询存在问题:

SELECT * 
FROM g1 
LEFT JOIN g_u_groups ON 
    g_u_groups.group_id = g1.id 
    AND (g_u_groups.action = 'add' OR g_u_groups.id is null) 
ORDER BY g_u_groups.id DESC 
LIMIT 10 

现在它只选择在g_u_groups中有行的组。

我想按照最新的'add'动作排序所有组,但我也想选择没有actionsgroups

的预计业绩:

id | name | 
1 | G1 | 
3 | G3 | 
2 | G2 | 
4 | G4 | 
5 | G5 | 
+0

细说与样本数据的问题和预期的结果。 – Viki888

+0

@ Viki888在这里你去 –

+0

添加预期结果请 – scaisEdge

回答

0

这是否返回预期?

SELECT g1.id, g1.name 
    FROM g1 
    LEFT JOIN g_u_groups 
    ON g_u_groups.group_id = g1.id 
     AND g_u_groups.action = 'add' or g_u_groups.id is null 
    ORDER BY g_u_groups.id DESC, g1.id DESC 
    LIMIT 10 

POST谈排序多列,它可以帮助你

+0

上面的预期结果,但如果我删除了哪里条件,我将收到所有结果,我唯一的问题将是组的顺序。 –

+1

编辑我的帖子,检查我的帖子中多列排序的链接 – AndreL

0

这里是SQL返回由最新添加的动作也显示了不行动项目:

SELECT * 
FROM g1 
LEFT JOIN g_u_groups ON 
g_u_groups.group_id = g1.id 
where (g_u_groups.action = 'add' OR g_u_groups.id is null) 
ORDER BY g_u_groups.id DESC 
LIMIT 10;