首页 > 解决方案 > 如何添加一行以检查它是否存在?

问题描述

我目前有一张桌子 A

+--------+---------+
| eventID | hostID |
+--------+---------+
|     62 |       1 |
|     61 |       5 |
+--------+---------+

和表 B

+--------+---------+
| userID | eventID |
+--------+---------+
|      1 |      61 |
|      5 |      61 |
+--------+---------+

我想创建一个查询,它左连接表 A 和表 B,并检查表 B 中是否存在我的表 A eventID 和 hostID 的 evnetID 和 userID。如果存在,则 stats 将为 1,否则将为 0。为了更直观地理解,我希望我的输出如下所示:

+--------+-----------+------------+
|eventID | hostID   | status     | 
+--------+-----------+------------+
|     62 | 1         |          0 |      
|     61 | 5         |          1 |    
+--------+-----------+------------

如您所见,表B中不存在eventID = 62和hostID = 1,因此status将为0,而eventID = 61而hostID = 5存在,因此状态将为1。

标签: sql

解决方案


使用EXISTS表达式可以更有效地解决此问题:

SELECT eventID, hostID,
       CASE WHEN EXISTS (SELECT * 
                         FROM b 
                         WHERE b.eventID = a.eventID
                           AND b.userID = a.hostID) THEN 1
            ELSE 0
       END AS status
FROM a

dbfiddle 上的演示


推荐阅读