Mysql 计算左联接的结果只返回1行
我有一个用户表和另一个提交网站表。我想选择所有用户,无论他们是否在网站表中有网站。如果他们这样做了,我想在我的PHP脚本中使用它们 我的问题是:Mysql 计算左联接的结果只返回1行,mysql,sql,Mysql,Sql,我有一个用户表和另一个提交网站表。我想选择所有用户,无论他们是否在网站表中有网站。如果他们这样做了,我想在我的PHP脚本中使用它们 我的问题是: SELECT u.user_country, u.user_id, u.user_email, u.user_verified, c.country_iso, c.country_nicename, count(distinct w.website_id) as websiteco
SELECT
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename,
count(distinct w.website_id) as websitecount
FROM user u
LEFT JOIN country c
ON c.country_id = u.user_country
LEFT JOIN websites w
ON w.website_owner = u.user_id
我的用户表:
CREATE TABLE `user` (
`user_id` bigint(20) NOT NULL,
`user_username` varchar(50) NOT NULL,
`user_email` varchar(255) NOT NULL,
`user_firstname` varchar(50) NOT NULL,
`user_surname` varchar(50) NOT NULL,
`user_country` varchar(100) NOT NULL,
`user_password` varchar(255) NOT NULL,
`user_verified` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我的网站表
CREATE TABLE `websites` (
`website_id` bigint(20) NOT NULL,
`website_name` varchar(75) NOT NULL,
`website_url` varchar(255) NOT NULL,
`website_type` varchar(10) NOT NULL,
`website_verified` varchar(10) NOT NULL,
`website_owner` bigint(20) NOT NULL,
`website_adult_content` varchar(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
现在,当我从SQL中删除
count(distinct w.website\u id)作为websitecount
时,它会选择它应该选择的所有行。但如果输入,它只选择1。我正在尝试选择全部。您确实需要在此处使用分组:
SELECT
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename,
count(distinct w.website_id) as websitecount
FROM user u
LEFT JOIN country c
ON c.country_id = u.user_country
LEFT JOIN websites w
ON w.website_owner = u.user_id
group by u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename
如果您没有包含GROUPBY
子句,并且您正在使用聚合函数,MySQL将任意选择一条记录返回。一个group by
基本上是说“给我这些东西的所有组合”,如果你没有,MySQL不知道你想要什么,但也不会告诉你。如果没有group by
,其他RDBMS甚至不允许您运行查询,但出于某种原因,MySQL提供了在查询中未包含此子句时是否需要提醒的选项。有关更多信息,请参见。您确实需要使用分组方式,请参见此处:
SELECT
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename,
count(distinct w.website_id) as websitecount
FROM user u
LEFT JOIN country c
ON c.country_id = u.user_country
LEFT JOIN websites w
ON w.website_owner = u.user_id
group by u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename
如果您没有包含GROUPBY
子句,并且您正在使用聚合函数,MySQL将任意选择一条记录返回。一个group by
基本上是说“给我这些东西的所有组合”,如果你没有,MySQL不知道你想要什么,但也不会告诉你。如果没有group by
,其他RDBMS甚至不允许您运行查询,但出于某种原因,MySQL提供了在查询中未包含此子句时是否需要提醒的选项。有关详细信息,请参阅。看起来您缺少分组依据。您需要在count中为相同的列指定所需的内容
SELECT
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename,
count(distinct w.website_id) as websitecount
FROM user u
LEFT JOIN country c
ON c.country_id = u.user_country
LEFT JOIN websites w
ON w.website_owner = u.user_id
GROUP BY
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename
注:如果您需要不同的网站数量,上述查询应该是好的
如果您正在查找所有网站计数(即有重复项),则需要删除不同的
SELECT
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename,
count(w.website_id) as websitecount
FROM user u
LEFT JOIN country c
ON c.country_id = u.user_country
LEFT JOIN websites w
ON w.website_owner = u.user_id
GROUP BY
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename
看来你错过了分组。您需要在count中为相同的列指定所需的内容
SELECT
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename,
count(distinct w.website_id) as websitecount
FROM user u
LEFT JOIN country c
ON c.country_id = u.user_country
LEFT JOIN websites w
ON w.website_owner = u.user_id
GROUP BY
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename
注:如果您需要不同的网站数量,上述查询应该是好的
如果您正在查找所有网站计数(即有重复项),则需要删除不同的
SELECT
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename,
count(w.website_id) as websitecount
FROM user u
LEFT JOIN country c
ON c.country_id = u.user_country
LEFT JOIN websites w
ON w.website_owner = u.user_id
GROUP BY
u.user_country,
u.user_id,
u.user_email,
u.user_verified,
c.country_iso,
c.country_nicename
您缺少一个分组依据
。您缺少分组依据
。我知道mysql允许它(天知道为什么),但你真的应该使用它it@Lamak,如果它丢失了怎么办?按所有需要的列分组,或者只是一些不可预测的事情?@jarlh说实话,我不知道,因为我不使用mysql。但是我推测,op所说的就是发生的事情,它返回了一行带有某个值的数据。您缺少了一个分组依据
。您缺少了分组依据
。我知道mysql允许它(天知道为什么),但你真的应该使用它it@Lamak,如果它丢失了怎么办?按所有需要的列分组,或者只是一些不可预测的事情?@jarlh说实话,我不知道,因为我不使用mysql。但我想发生的事情就是op所说的,它返回一行带有某个值的数据