繁体   English   中英

在mySql join语句中显示第1个表的所有结果,但仅显示第2个表的第一个结果

[英]Show all results from 1st table but only 1st result from 2nd table in mySql join statement

我有一个HTML表单,该表单在下表中搜索名字,姓氏,地址(以及为简单起见在此省略的其他几列):

会员

id | firstname | lastname
---+-----------+-----------
1  | Jon       | Doe
2  | Mary      | Smith
3  | Jon       | James

地址

id | member_id | address
---+-----------+-----------
1  | 1         | Home address
2  | 1         | Work address
3  | 2         | Home address
4  | 3         | Home address
5  | 3         | Work address
6  | 3         | Holiday address

成员可以有无限数量的地址。

我如何搜索所有出现的“乔恩”为姓,但仅显示第一个地址? 例如:

Jon Doe Home address
Jon James Home address

到目前为止,这是我们的mySQL语句:

SELECT * FROM tbl_members T1 INNER JOIN tbl_addresses T2 ON T1.id = T2.member_id WHERE firstname = 'Jon'

我们也尝试过:

SELECT * FROM tbl_members T1 LEFT JOIN tbl_addresses T2 ON T1.id = T2.member_id WHERE firstname = 'Jon'

这两个陈述都给我们:

Joh Doe Home address 
Jon Doe Work address 
Jon James Home address 
Jon James Work address 
Jon James Holiday address

非常感谢您的帮助!

您可以使用LIMIT关键字:

SELECT * FROM tbl_members T1 INNER JOIN tbl_addresses T2 ON T1.id = T2.member_id WHERE firstname = 'Jon' LIMIT 1

参考: https : //dev.mysql.com/doc/refman/5.0/en/select.html

嗨,我认为您应该执行以下操作:

SELECT T1.firstname, T1.lastname, T2.address
FROM MEMBERS AS T1
INNER JOIN (SELECT member_id, address
            FROM ADDRESSES
            GROUP BY member_id) AS T2
ON T1.id = T2.member_id

这是SQL Fiddle ,以了解其工作原理...

GL!

编辑:

当然,如果需要,可以在查询末尾添加WHERE子句以从表或名称组中选择特定名称,例如

WHERE firstname = 'joe'

或任何...

雇用是为此的小提琴 ...

您可以在您的SQL语句中添加GROUP BY子句

SELECT firstname, lastname, address
FROM members
JOIN addresses ON members.id = addresses.member_id
WHERE firstname = 'Jon'
GROUP BY members.id;

尝试使用关键字的上限 ,如所描述这里

使用LIMIT 1 ,您可以将查询限制为返回的第一行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM