2016-01-20 36 views
0

使用MySQL。在另一个表中存在设置标志值记录的基础

下面是我的表格结构。

表:一个

aId(PK)  aValue1  aValue2 
---------------------------------- 
1   value-a1 value-b1 
2   value-a2 value-b2 
3   value-a3 value-b3 
4   value-a4 value-b4 

表:乙

bId(PK)  aId(FK)  bValue1  bValue2 
----------------------------------------------------- 
1   1   val-1  value-1 
2   1   val-2  value-2 
3   2   val-3  value-3 

如何能够做到下面的结果在单个查询。 如果表中存在相关记录,我想要表中的所有记录:A和标志值对每个记录:B 我试着INNER JOIN,左/右但没有帮助。

结果

aId  aValue1  aValue2    bId (flag if record exist Y else N) 
----------------------------------------------- 
1   value-a1 value-b1  Y 
2   value-a2 value-b2  Y 
3   value-a3 value-b3  N 
4   value-a4 value-b4  N 

我的查询:这回我超过4行。这是不对的

SELECT 
c.* , if(d.bId is NULL,'N','Y') 
from a c 
LEFT JOIN b d ON a.aId = d.aId 
+2

为什么你的左连接不起作用?这是正确的解决方案。你能证明你的尝试吗?将它添加到你的问题上。 –

+1

@JorgeCampos是正确的,只要使用if(bid为NULL,'N','Y')为Y或N选择 – developerCK

+0

添加SQL查询属性。问题是..获取冗余数据 – fresher

回答

0

只需添加条件印刷品YN标志。

SELECT DISTINCT c.* , IF(d.bId is null, 'Y', 'N') 
    FROM tableA c 
     LEFT JOIN tableB d ON a.aId = d.aId 
+0

如果TableA有4条记录,则查询应该只返回4条记录,并基于这4条记录,如果id存在于第二个TableB中,标志值Y/N。但查询返回冗余数据 – fresher

+0

对不起我的坏...其工作不知道为什么上次错误 – fresher

+0

@fresher我做了一个编辑添加'DISTINCT'命令:) –