从一个表中拉出多行但从相关表中只拉出一行

时间:2018-01-07 19:37:15

标签: mysql pdo

我目前正在尝试加入两个表,但防止其中一个表重复信息。

用户的表有4列,uid,名称,电子邮件和状态。 统计表有4列,uid,date,follow,views

我希望能够做的是从统计信息表中提取每条记录,只从用户表中提取名称,电子邮件和状态值。我对下面的SQL的问题是它复制了用户表中的数据,有没有办法解决这个问题?

SELECT u.name
     , u.email
     , u.status
     , s.date
     , s.follows
     , s.views 
  FROM users u
  JOIN stats s 
    ON u.id = s.uid 
 WHERE name = :name

1 个答案:

答案 0 :(得分:0)

如果您不希望每个匹配的统计信息行都附带其匹配的用户行,那么您必须运行两个查询:

SELECT u.id, u.name, u.email, u.status FROM users u WHERE name = :name

请注意u.id的结果,因为您将其用作第二个查询的参数:

SELECT s.date, s.follows, s.views FROM stats s WHERE s.uid = :uid

您必须了解关系模型的工作原理,因为每个查询结果本身都是一种关系。匹配数据在每一行中返回,这使得JOIN成为代数的一部分,其中结果可以用作另一行JOINGROUP BY的操作数。 ,或其他一些关系操作。

你应该阅读C. J. Date的SQL and Relational Theory: How to Write Accurate SQL Code