显示一个表的结果并在另一列中查找

时间:2019-06-13 10:18:10

标签: mysql

让我先显示表结构,然后再问我的问题

假设表A

  id | url |
  1  | page
  2  | home
  3  | product
  4  | sell

和表b

 id |user_id | table a id
  1 | 1      | 1

我想要的输出

  id | url     |   ispermission
  1  | page    | 1
  2  | home    | 0
  3  | product | 0
  4  | sell    | 0
权限中的

(值1)表示它与用户映射,如表b所示,其他表示没有映射 以下是我的查询

 select p.id,p.url,if(r.user_id=4,1,0) ispermission from  
 `table a` p
 left join `table b` r on p.id=r.url_id  
 group by p.id,p.url order by ispermission DESC 

此查询的效果很好,但在某些情况下它失败了,结果让我们考虑失败的情况(我得到的输出是类似的(请注意,此结果没有groupby)

     id | url     |   ispermission
     1  | page    | 0
     1  | page    | 1
     2  | home    | 0
     3  | product | 0
     4  | sell    | 0

通过分组使用,我得到类似

的结果
     id | url     |   ispermission
     1  | page    | 0
     2  | home    | 0
     3  | product | 0
     4  | sell    | 0

2 个答案:

答案 0 :(得分:0)

您是否正在寻找类似的东西?

SELECT 
T1.ID, 
T1.Url, 
COUNT(T2.[table a id]) Impression
FROM TableA T1
LEFT JOIN TableB T2 ON  T1.ID  = T2.[table a id]
GROUP BY T1.ID,T1.Url

答案 1 :(得分:0)

LEFT JOINCASE表达式一起使用:

select a.id, a.url,
       case when b.tableAid is not null then 1 else 0 end as ispermission
from TableA a
left join TableB b on b.tableAid = a.id

Demo on db<>fiddle