我的数据库中有2个表。表用户和表格配置文件。
users(user_id, surname, email)
profile(profile_id, country, user_id)
表格配置文件中的user_id是FK(来自users表)。我有以下查询,以便从我的数据库中选择所有姓氏“smith”,这些姓氏来自国家“USA”。这是我的问题:
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个结果,而不是所有结果来自我的数据库(姓氏史密斯来自美国的人)。知道它可能出错的地方以及如何纠正它?
答案 0 :(得分: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
答案 1 :(得分: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列上加入表格配置文件。之后过滤数据并仅返回满足这些条件的记录。