0

我正在使用以下查询,效果很好,但我需要对其进行修改。

SELECT  * 
FROM    `table1` LEFT JOIN 
        `table2` ON table1.messageid=table2.messageid 
WHERE   `venue_active` = 1

我的问题是我table2.messageid可能有超过 1 个匹配项,而我只显示 1 个,但我仍然希望返回 table1 上的所有记录。

例如:

table1.messageidTable2 上可能有很多孩子,我只需要显示 1 个

我怎样才能做到这一点?

更新:我尝试添加: GROUP BY table1.messageid 但它没有返回任何内容。

4

3 回答 3

2

只需添加group by

SELECT  * 
FROM    `table1` LEFT JOIN 
        `table2` ON table1.messageid=table2.messageid 
WHERE   `venue_active` = 1
GROUP BY table1.messageid
于 2013-06-28T10:40:40.227 回答
2

添加一个group by子句

SELECT  * 
FROM    `table1` LEFT JOIN 
        `table2` ON table1.messageid=table2.messageid 
WHERE   `venue_active` = 1
GROUP BY table1.messageid
于 2013-06-28T10:41:10.503 回答
1

我没有您的确切表格,但这是您的查询从我的几个表格中运行的等价物,这些表格是 1:许多关系 tblusers 是您的 table1,tblmessages 是您的 table2

SELECT tblusers.ID FROM `tblusers` LEFT JOIN tblmessages ON tblusers.ID=tblmessages.recipient_user_id WHERE tblmessages.state=1

这返回这个

如果我现在将查询更改为

SELECT DISTINCT tblusers.ID FROM `tblusers` LEFT JOIN tblmessages ON tblusers.ID=tblmessages.recipient_user_id WHERE tblmessages.state=1

我现在得到一个唯一的列表,其中包含在我的消息表中至少有一条消息的所有用户。

于 2013-06-28T10:59:01.310 回答