有一个查询来计算表question_category
中的行:
SELECT
idSpecialization,
thematicspecialization.SpecializationName AS SpecializationName,
SubscrubeToUsersIdNote,
COUNT(question_categoryId) AS CNT,
COUNT(idSubscrubeToUsers) AS SUBS
FROM thematicspecialization
LEFT JOIN question_category ON question_category.question_categoryIdCategory = thematicspecialization.idSpecialization
LEFT JOIN question a ON a.idQuestion = question_category.question_categoryIdQuestion
LEFT JOIN subscrubetousers ON (subscrubetousers.SubscrubeToUsersIdNote = idSpecialization AND subscrubetousers.SubscrubeToUsersType = 4 AND SubscrubeToUsersStatus = 1)
WHERE a.country = 1
GROUP BY idSpecialization
需要显示thematicspecialization
的类别名称,条件为WHERE a.country = 1
才能加入表question a ON a.idQuestion = question_category.question_categoryIdQuestion
在我的情况下 - 不显示类别。
答案 0 :(得分:0)
不清楚。 但我想。您有一个像
这样的条件的联接subscrubetousers.SubscrubeToUsersIdNote = idSpecialization AND subscrubetousers.SubscrubeToUsersType = 4 AND SubscrubeToUsersStatus = 1be this
可能是这种情况发生冲突thematicspecialization
字段
答案 1 :(得分:0)
这对于一个人来说太长了。
这是您的查询,修改了一下以使用表别名,因此更容易阅读:
SELECT ts.idSpecialization, ts.SpecializationName, sts.SubscrubeToUsersIdNote,
COUNT(question_categoryId) AS CNT,
COUNT(idSubscrubeToUsers) AS SUBS
FROM thematicspecialization ts LEFT JOIn
question_category qc
ON qc.question_categoryIdCategory = ts.idSpecialization LEFT JOIN
question q
ON q.idQuestion = qc.question_categoryIdQuestion LEFT JOIN
subscrubetousers sts
ON (sts.SubscrubeToUsersIdNote = ts.idSpecialization AND
sts.SubscrubeToUsersType = 4 AND
sts.SubscrubeToUsersStatus = 1)
WHERE q.country = 1
GROUP BY idSpecialization;
以下是我注意到的事情:
ts
和qc
之间的联接位于IdCategory
和idSpecialization
。这似乎是一个奇怪的名字组合。sts
和ts
之间的联接部分位于SubscrubeToUsersIdNote
和idSpecialization
。这似乎是一个奇怪的名字组合。where
条件正在将某些left join
转换为内部联接 - 无论如何都要问{1}}为什么要这样做。left join
列将返回非常相似的数字,因为它们在count
个键上计算非NULL值。基于此查询,我不知道您真正想要做什么。你应该写另一个问题,用样本数据和所需的输出来表达你想要做的事情。这个问题已有两个答案。澄清它以便理解将(可能)使答案无效,这是不礼貌的。