我目前正在尝试加入两个表,但防止其中一个表重复信息。
用户的表有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
答案 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
成为代数的一部分,其中结果可以用作另一行JOIN
或GROUP BY
的操作数。 ,或其他一些关系操作。
你应该阅读C. J. Date的SQL and Relational Theory: How to Write Accurate SQL Code。