sql – 如果左连接返回任何行,返回’1’的更好方法是什么?

前端之家收集整理的这篇文章主要介绍了sql – 如果左连接返回任何行,返回’1’的更好方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有三张桌子,’A’,’B’和’C’.我查询了’A’和’B’,但是我想添加一个字段,告诉我是否有一个或多个(我不关心多少)’C’是外来键入’A’.

这就是我所拥有的:

  1. SELECT A.A_id,A.col_2,col_3,B.col_2,A.col_4
  2. count(C.id) as C_count
  3. FROM A
  4. JOIN B ON (A.B_id = B.B_id)
  5. LEFT JOIN C ON (A.A_id = C.A_id)
  6. WHERE A.A_id = ?
  7. GROUP BY A.A_id,A.col_4
  8. ORDER BY CASE WHEN A.col_2 = ?
  9. THEN 0
  10. ELSE 1
  11. END,col_3;

这似乎有点低效,因为我必须在GROUP BY中列出所有这些字段,也因为我正在计算我真正想要的是否至少有一个匹配.这可以改善吗?

解决方法

使用子查询存在而不是……
  1. Select A.A_id,A.col_4,Case When Exists (Select * From C
  2. Where A_id = A.A_id)
  3. Then 1 Else 0 End As C_Exists
  4. From A Join B
  5. On (A.B_id = B.B_id)
  6. Where A.A_id = ?
  7. Order By Case When A.col_2 = ?
  8. Then 0 Else 1 End,col_3;

猜你在找的MsSQL相关文章