如果在另一个表mysql中存在ID,如何返回一个标志

时间:2018-06-07 14:21:02

标签: mysql

我尝试创建一个标志,如果表B中存在来自表A的id,则返回该标志示例:

Table A
------------------
id | name |
 1 | beer |
 2 | wine |
------------------
table B
-----------------
id | id_table_a
1  | 1

我想要回复一些这样的事情:

-------------------------------
id | name | id_table_a | flag |
 1 | beer | 1          | 1    |
 2 | wine | Null       | 0    |
-------------------------------

其中标志1 =存在于另一个表中,或者0 =不存在

请建议或链接!! 注意 - 没有创建行标志可能存在一个可能性创建一个时间标志o任何建议...... !!

3 个答案:

答案 0 :(得分:1)

尝试以下方法:

SELECT a.id, a.name, b.id, CASE WHEN b.id>0 THEN 1 ELSE 0 END flag
FROM tableA AS a LEFT JOIN tableB AS b ON b.id_table_a=a.id

编辑:更改了on - 子句。谢谢@amflare的暗示!样本数据很短,我忽略了它。 : - )

这是另一种方式:

SELECT a.id, a.name, b.id, CAST(COALESCE( b.id, 0) AS BIT) flag
FROM tableA AS a LEFT JOIN tableB AS b ON b.id_table_a=a.id

答案 1 :(得分:1)

这就是你要找的东西:

select a.*, b.id_table_a, case when b.id is null then 0 else 1 end as flag 
from tablea a
left join tableb b on a.id = b.id_table_a

答案 2 :(得分:0)

SELECT *, IF(EXISTS(b.id_table_a),(b.id_table_a IS NOT NULL),0) AS flag
FROM TABLEA a
JOIN TABLEB b on a.id = b.id_table_a

这样的东西应该可以工作,因为括号中的位将评估true / false,而mysql显示true为1,false显示为0.