簡體   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