Sql 从2个表中选择值不适用于联接

Sql 从2个表中选择值不适用于联接,sql,Sql,我的数据库中有两个表: users('user_id', 'name', 'surname', 'email') 和表: profile('profile_id', 'country') 在我的php脚本中有一个搜索框,用户在其中插入名称,搜索脚本尝试从我的数据库中选择所有来自美国的名称。知道如何编写sql语句吗。这就是我所做的,但不起作用 $sql = " SELECT u.name,u.surname, u.email,u.user_id,p.profile_id FROM users

我的数据库中有两个表:

users('user_id', 'name', 'surname', 'email')
和表:

profile('profile_id', 'country')
在我的php脚本中有一个搜索框,用户在其中插入名称,搜索脚本尝试从我的数据库中选择所有来自美国的名称。知道如何编写sql语句吗。这就是我所做的,但不起作用

$sql = " SELECT u.name,u.surname, u.email,u.user_id,p.profile_id FROM users u 
         LEFT JOIN profile p ON p.country = 'uk'
         WHERE ((u.surname LIKE '$name%' AND u.name LIKE '$surname%') OR 
         (u.surname LIKE '$surname%' AND u.name LIKE '$name%')) AND country IS NOT NULL";

我在国家/地区中使用了“不为空”,因为有些用户可能没有在他们的个人资料页面中输入他们的国家/地区。

除非我遗漏了什么,否则这将起作用:

$sql = " SELECT u.name, 
  u.surname, 
  u.email, 
  u.user_id,
  p.profile_id
FROM users u 
    INNER JOIN profile p ON p.country = 'usa'
WHERE ((u.surname LIKE '$name%' AND u.name LIKE '$surname%') OR 
    (u.surname LIKE '$surname%' AND u.name LIKE '$name%'))
内部连接
不再需要
不为空
条件,
国家
现在设置为查找来自
美国
而不是
英国
的用户

根据@Sina的观察,这个查询从一开始就很奇怪。
用户
个人资料
有何关联?如果
profile\u id
user\u id
,则使连接正常工作-如下所示:

INNER JOIN profile p ON p.profile_id = u.user_id AND p.country = 'usa'

由于这是您的加入条件,因此此查询将为您提供具有“uk”国家/地区配置文件的所有用户

如果同一用户的用户id和个人资料id相同(例如,如果个人资料id=4的国家为“dk”,则用户id=4的用户居住在丹麦),则您应加入如下内容:

SELECT ...
FROM users u JOIN profile p ON u.user_id = p.profile_id
WHERE ...
如果情况并非如此,则不必使用
JOIN
,只需将其作为where条件编写,并在
FROM
子句中使用笛卡尔积,如下所示:

SELECT ...
FROM users u, profile p
WHERE p.country = 'usa'

将连接视为基于共享属性将两个表放在一起的东西。在后一种情况下,没有共享属性。

阅读一些MySQL手册中的
JOIN
语句如何?我已经尝试了上面的sql语句,但是从数据库中得到了我想要的一切,而不是我想要选择的。如果
国家不为空
是一个条件,那么
左JOIN
有什么意义。您可以使用
内部联接
。顺便说一句,你的查询发现的是英国人而不是美国人。你知道如何使用内部联接吗?这里有一个很好的解释:哦,首先我们需要知道两个表之间的关系是什么?如果
用户
个人资料
之间没有任何关系,那么联接操作符将
交叉联接
,完全没有意义。没有两个用户会因国家不同而有所区别。@SinaIravanian,你说得对。非常好的观察,我将编辑以清楚地解决这个问题。如果我使用中国而不是美国,并且我的数据库中没有来自中国的用户,那么就不会显示任何我想要的内容。好的但是,如果我使用美国作为国家,并且有来自美国的用户,那么将显示我数据库中的所有内容。来自所有国家/地区的所有用户,并重复此过程约5-6次。知道为什么会发生这种情况吗?@user2491321,如果你什么都没有得到,那就意味着
用户id
个人资料id
字段不同步(即不是你所期望的),或者没有来自
美国的人,除非在
配置文件
表中有另一个字段可用于映射到
用户
表,否则必须手动操作。