如何使用连接,但只获取第一个表的行?

如何使用连接,但只获取第一个表的行?

问题描述:

我有这两个表:如何使用连接,但只获取第一个表的行?

// one 
+----+-------+ 
| id | value | 
+----+-------+ 
| 1 | aaa | 
| 2 | bbb | 
| 3 | ccc | 
+----+-------+ 

// two 
+----+-------+ 
| id | value | 
+----+-------+ 
| 2 | ddd | 
| 3 | eee | 
| 4 | fff | 
+----+-------+ 

这里是我的查询:

SELECT one.value FROM one JOIN two ON one.id = two.id 

这里是当前的结果:

// 4 rows 
+-----+ 
| bbb | 
|  | 
| ccc | 
|  | 
+-----+ 

这里是预期的输出:

// 2 rows 
+-----+ 
| bbb | 
| ccc | 
+-----+ 

正如你所看到的我只想只有one表中选择行。我怎样才能做到这一点?

+1

你的查询看起来很适合我。我不认为它会根据您的样本数据返回4个结果,它应该返回您的预期结果。 – sgeddes

+0

和工作小提琴:http://sqlfiddle.com/#!9/a70df8/1 – sgeddes

+0

@sgeddes啊好的谢谢..我想我无法模拟我真正的问题.. – stack

如果你试试这个在您的SQL提琴:

SELECT post_id, COUNT(*) from events 
GROUP BY post_id 
ORDER BY COUNT(*) DESC 

你可以注意到,每个qanda有几个相关的事件,因此你越来越具有匹配post_id所有事件。

如果你期待两排,加DISTINCT

SELECT DISTINCT q.id, ee.table_code, q.subject 
FROM 
    qanda q JOIN 
    events ee on ee.post_id = q.id and 
     ee.author_id = 31 and 
     ee.table_code = 15 
+0

谢谢.. upvote – stack

+0

你知道吗?我想要得到的只是一个主题,只有一行,但有时'subject'是空的,然后我需要使用'related'列并找到它的主题。那可能吗? – stack

+0

查看'CASE WHEN ... THEN ...'结构。 – Bulat

这会为你工作

SELECT table1.value FROM table1, table2 WHERE table1.id = table2.id 

这基本上相等加入

你可以参考更多的等加入这里here

+0

谢谢.. upvote – stack