1

我的数据库中有 2 个表。表用户和表配置文件。

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

表配置文件中的 user_id 是 FK(来自 users 表)。我有以下查询,以便从我的数据库中选择来自国家“美国”的所有姓氏“史密斯”。这是我的查询:

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 的人)。任何想法可能是错误的以及如何纠正它?

4

2 回答 2

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的信息

于 2013-07-25T17:00:22.003 回答
0

仅使用join on条件中与联接相关的列。将 2 个表链接在一起的列。并将其余部分放在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 列上加入表格配置文件。之后过滤数据并仅返回满足这些条件的记录。

于 2013-07-25T16:53:31.087 回答