返回NULL或0的MySQL联接表

返回NULL或0的MySQL联接表,mysql,sql,Mysql,Sql,我正在尝试创建一些联接表。其思想是为相同的名称显示选定的0 0r 1.name。如果不是,则值应为NULL或0,否则为1 样本数据 表1 ID NAME ------------ 1 Zebra 2 Monkey 3 Lion 4 Rabbit 表2 ID ID_table1 Name_table1 -------------------------- 1 1 ZEBRA 2 3 Lion 3

我正在尝试创建一些联接表。其思想是为相同的名称显示选定的0 0r 1.name。如果不是,则值应为NULL或0,否则为1

样本数据

表1

ID   NAME
------------
1    Zebra

2    Monkey

3    Lion

4    Rabbit
表2

ID  ID_table1  Name_table1
--------------------------
1       1        ZEBRA   
2       3        Lion   
3       3        Lion
4       1        Zebra
5       2        Monkey
6       3        Lion  
7       4        Rabbit
若我连接表并从表2中选择值,其中Id为2

结果

ID    NAME   Selected
--------------------- 
1    Zebra      0
2    Monkey     0
3    Lion       1  
4    Rabbit     0

您不需要将这两个表连接起来

您可以仅使用表2执行此操作

DECLARE @selected INT
SET @selected = 2
SELECT DISTINCT
        id_table1 AS ID ,
        name_table1 AS Name ,
        SUM(CASE WHEN ID = @selected THEN 1
                 ELSE 0
            END) AS selected
FROM    Table_2
GROUP BY ID_Table1 ,
        name_table1
ORDER BY id_table1
结果:

ID  Name    selected
1   ZEBRA   0
2   Monkey  0
3   Lion    1
4   Rabbit  0

需要使用
左连接
大小写

SELECT T1.ID, NAME , case when T2.ID_Table1 is null then 0 else 1 end as value
FROM
Table1 T1
LEFT JOIN( select ID_table1 
  FROM Table2
  where ID =2
 ) T2
on T1.ID = T2.ID_table1

对于我在评论中提到的内容,您应该使用COUNT()


您的表_2是否包含所有三列?也许我在这里遗漏了什么,为什么我们需要将表_1中的所有内容都包含在表_2中呢?@RashmiPandit,因为输出完全基于T1,在示例中,表2的所有值都来自T1,但可能并不总是需要。看起来像是一个测试LEFT JOIN+1使用情况的任务,还注意到查询的执行计划显示它更高效。为什么您甚至有一个案例?为什么不使用内置函数呢?
SELECT t.ID, t.NAME, COUNT(t1.id_table1)
FROM Table1 t
LEFT JOIN
(   SELECT ID_table1 
    FROM Table2
    WHERE ID=2
)t1 ON t.ID = t1.ID_table1
GROUP BY t.id