2013-07-25 15 views
1

我在我的數據庫中有2個表。表用戶和表格配置文件。mysql查詢從我的數據庫中只返回一個結果

users(user_id, surname, email) 
profile(profile_id, country, user_id) 

user_id在表格中,是FK(來自用戶表格)。爲了從我的數據庫中選擇所有來自「USA」國家的姓氏「smith」,我有以下查詢。這是我的查詢:

SELECT u.name, 
u.surname, 
u.email, 
u.user_id, 
p.user_id 
FROM users u 
INNER JOIN profile p ON p.country = 'USA' 
WHERE u.surname = 'smith' AND u.user_id = p.user_id 

此查詢工作正常,但問題是,只返回1的結果,而不是從我的數據庫(來自美國的人姓Smith)的所有結果。任何想法可能是錯誤的,以及如何糾正?

回答

1

您應該將u.user_id = p.user_id條件與ON condition,因爲您要在'user_id'字段上應用JOIN。而where clause應該有剩餘的條件。

SELECT u.name, 
     u.surname, 
     u.email, 
     u.user_id, 
     p.user_id 
FROM users u 
INNER JOIN profile p ON u.user_id = p.user_id 
WHERE u.surname = 'smith' And p.country = 'USA' 

你可以閱讀有關INNER JOINS

0

僅使用join on條件中與連接相關的列。將兩個錶鏈接在一起的列。並把其餘的在where條款。這應該工作:

SELECT u.name, 
     u.surname, 
     u.email, 
     u.user_id, 
     p.user_id 
FROM users u 
INNER JOIN profile p ON u.user_id = p.user_id 
WHERE p.country = 'USA' 
AND u.surname = 'smith' 

這也是更好的可讀性。您可以這樣讀取:

從表格用戶中選擇這些列。在這2列上也加入表格配置文件。之後,篩選數據並僅返回滿足這些條件的記錄。

相關問題