MySQL查询中的双打

时间:2011-06-09 00:31:35

标签: mysql sql

我正在尝试这样做,以便找到具有特定邮政编码的人,但在用户表格下按ASC顺序列出全名...

  SELECT profiles.id 
    FROM `profiles`,`users` 
   WHERE profiles.zipcode = '$ZIPCODE' 
ORDER BY users.full_name ASC

就像显示双打一样。

3 个答案:

答案 0 :(得分:2)

我认为您需要加入,尝试类似

SELECT Users.full_name
FROM Users
INNER JOIN profiles
ON profiles.user_id = users.id
WHERE profiles.zipcode = '$ZIPCODE' 
ORDER BY users.full_name ASC

我假设配置文件表中有用户的外键?答案假设配置文件表中的user_id的外键

编辑:

外键是属于另一个表的键。因此,如果您有一个用户和一个配置文件表,那么您很可能在配置文件表中有一个列,每个配置文件都会引用一个唯一的用户(假设用户每个只有一个配置文件)

答案 1 :(得分:0)

如果您只想显示不同的ID,那么这将有效(根据您的SQL方言,您也可以选择不同的profiles.id并跳过group by语句。)

   SELECT profiles.id 
   FROM (select * from `profiles`,`users` 
         WHERE profiles.zipcode = '$ZIPCODE' 
         ORDER BY users.full_name
         )subquery
   GROUP BY profiles.id;

答案 2 :(得分:0)

在您的查询中,您正在执行此操作:

FROM `profiles`,`users`

并且没有提供相对于这些表的关系的JOINWHERE条件。这导致了笛卡尔积。你很幸运,你只会得到双打;结果很容易变大。