我(至少对我而言)有一个复杂的查询,该查询是使用此站点中的示例构建的。我添加的最后一件事是IF
语句。如果没有IF语句,它将使用IF语句的TRUE部分。我希望你们的女孩/家伙可以在这里帮助我。这是查询:
SELECT
t.ID, t.start_time, t.end_time, t.start_date, t.end_date, t.balance,
u1.first_name AS teacher_one_first_name, u1.last_name AS teacher_one_last_name,
u2.first_name AS teacher_two_first_name, u2.last_name AS teacher_two_last_name,
company.name, company.post_city, tag, lvl,
IF(
t.balance=1,
(
(SELECT count(user_ID)
FROM company_lesson_block_student
WHERE lead_follow=0 AND company_lesson_block_ID=t.ID) AS lead,
(SELECT count(user_ID)
FROM company_lesson_block_student
WHERE lead_follow=1 AND company_lesson_block_ID=t.ID) AS follow
),
(SELECT count(user_ID)
FROM company_lesson_block_student
WHERE company_lesson_block_ID=t.ID) AS total_student
)
FROM company_lesson_block AS t
LEFT JOIN company_lvl ON company_lvl.ID = t.lvl_ID
LEFT JOIN tag ON tag.ID = t.style_ID
LEFT JOIN company ON company.ID=t.location_ID
LEFT JOIN user AS u1 ON t.teacher_one_ID=u1.ID
LEFT JOIN user AS u2 ON t.teacher_two_ID=u2.ID
WHERE t.company_ID='1' AND location_ID='1' AND company_season_ID='1'
ORDER BY start_date ASC
我收到的错误消息是:
您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册 为在“ AS线索”附近使用正确的语法,(在第10行选择(SELECT count(user_ID)FROM company_less)
任何帮助/提示都适用
答案 0 :(得分:0)
您想返回2列,但是IF
只能返回1,因此您需要2个IF
:
........................
IF(
t.balance=1,
(SELECT count(user_ID)
FROM company_lesson_block_student
WHERE lead_follow=0 AND company_lesson_block_ID=t.ID),
(SELECT count(user_ID)
FROM company_lesson_block_student
WHERE company_lesson_block_ID=t.ID)
) AS ????,
IF(
t.balance=1,
(SELECT count(user_ID)
FROM company_lesson_block_student
WHERE lead_follow=1 AND company_lesson_block_ID=t.ID),
(SELECT count(user_ID)
FROM company_lesson_block_student
WHERE company_lesson_block_ID=t.ID)
) AS ????
........................
必须在IF
的右括号后面设置别名。
也许您必须重新考虑此逻辑,因为对于FALSE
,相同的值将返回两次。