2017-02-26 27 views
0

我有2个表格需要连接,我想从连接的表格中知道是否存在与连接条件相匹配的退出行。我不想返回连接表中的所有行。如何在不返回所有连接的行的情况下连接2个MySQL表格

例子:

Table A 
ID Name 
1 Bob 
2 Sally 
3 Joe 

Table B 
Num ID Data 
1 1 anything 
2 1 some more 
3 3 thats it 

我希望它从一个表返回所有行什么,但我都不在乎知道的是,是否有上表B.匹配的ID我不想返回所有匹配的行。

所以我的输出会是这个样子:

ID Name Has Data 
1 Bob Yes 
2 Sally No 
3 Joe Yes 

我不想输出看起来像这样(它目前如此):

ID Name Has Data 
1 Bob Yes 
1 Bob Yes 
2 Sally No 
3 Joe Yes 

这里是我的查询:

SELECT a.ID, Name 
    FROM table_a AS a 
    LEFT JOIN (SELECT DISTINCT b.ID FROM table_b) AS b ON b.ID = a.ID 

我收到此错误消息: “字段列表”中的未知列'b.ID'

+0

尝试使用'选择table_b'在子查询 – Jhecht

+0

感谢@Jhecht DISTINCT table_b.ID但没有工作 –

回答

1
SELECT a.ID, Name 
CASE WHEN b.ID IS NULL THEN 'No' ELSE 'Yes' END as [Has data] 
FROM table_a AS a 
LEFT JOIN table_b ON b.ID = a.ID 
GROUP BY a.Id, Name 

SELECT a.ID, Name 
CASE WHEN EXISTS (SELECT 1 
        FROM table_b b 
        WHERE b.ID = a.Id) THEN 'Yes' 
    ELSE 'No' END as [Has data] 
FROM table_a AS a 

如果LEFT JOIN不会返回行,b.ID将是空的,然后使用CASE语句是返回或不取决于它的价值。

+0

我尝试了@McNets但我还是从表-B –

+0

优秀获得两行。 'GROUP BY'做了@McNets。谢谢 –

相关问题