使用concat和union的MySQL查询不起作用
大家好,我正在尝试将一个记录列表放到一个表中,以便搜索我正在为一个站点执行的功能 这三个表格分别是:一个用于页面信息,一个用于项目,一个用于最新新闻 然而,我的查询中出现了一个错误,我看不出有什么问题使用concat和union的MySQL查询不起作用,mysql,union,concat,Mysql,Union,Concat,大家好,我正在尝试将一个记录列表放到一个表中,以便搜索我正在为一个站点执行的功能 这三个表格分别是:一个用于页面信息,一个用于项目,一个用于最新新闻 然而,我的查询中出现了一个错误,我看不出有什么问题 SELECT 'section' AS colTYPE, title_sec AS title, CONCAT_WS(' ',contentcol1_sec, contentcol2_sec, contentcol3_sec) AS content, active_sec AS active
SELECT 'section' AS colTYPE, title_sec AS title,
CONCAT_WS(' ',contentcol1_sec, contentcol2_sec, contentcol3_sec) AS content,
active_sec AS active
FROM sections_sec
WHERE content LIKE 'fff' OR title LIKE 'fff' AND active = 1)
UNION(SELECT 'latest' AS colTYPE, title_lat AS title,
content_lat AS content, active_lat AS active
FROM latest_lat
WHERE content LIKE 'fff' OR title LIKE 'fff' AND active = 1)
UNION(SELECT 'project' AS colTYPE, title_prj AS title,
content_prj AS content, active_prj AS active
FROM projects_prj
WHERE content LIKE 'fff' OR title LIKE 'fff' AND active = 1)
我收到的错误是:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ')
UNION(SELECT 'latest' AS colTYPE, title_lat AS title,
content_lat AS conten' at line 3
您的第一个语句没有开括号。通常不需要将语句括在联合的括号中 您是否也确定不想使用UNION ALL
您的第一个语句没有开括号。通常不需要将语句括在联合的括号中 您是否也确定不想使用UNION ALL 您的第一个WHERE子句是在没有匹配的开括号的情况下关闭括号 您的第一个WHERE子句是在没有匹配的开括号的情况下关闭括号 试试这个:
SELECT 'section' AS colTYPE, title_sec AS title, CONCAT_WS(' ',contentcol1_sec, contentcol2_sec, contentcol3_sec) AS content, active_sec AS active
FROM sections_sec
WHERE (content LIKE 'fff' OR title LIKE 'fff') AND active = 1
UNION SELECT 'latest' AS colTYPE, title_lat AS title, content_lat AS content, active_lat AS active
FROM latest_lat
WHERE (content LIKE 'fff' OR title LIKE 'fff') AND active = 1
UNION SELECT 'project' AS colTYPE, title_prj AS title, content_prj AS content, active_prj AS active
FROM projects_prj
WHERE (content LIKE 'fff' OR title LIKE 'fff') AND active = 1
试试这个:
SELECT 'section' AS colTYPE, title_sec AS title, CONCAT_WS(' ',contentcol1_sec, contentcol2_sec, contentcol3_sec) AS content, active_sec AS active
FROM sections_sec
WHERE (content LIKE 'fff' OR title LIKE 'fff') AND active = 1
UNION SELECT 'latest' AS colTYPE, title_lat AS title, content_lat AS content, active_lat AS active
FROM latest_lat
WHERE (content LIKE 'fff' OR title LIKE 'fff') AND active = 1
UNION SELECT 'project' AS colTYPE, title_prj AS title, content_prj AS content, active_prj AS active
FROM projects_prj
WHERE (content LIKE 'fff' OR title LIKE 'fff') AND active = 1
在第一个子查询中,必须使用HAVING,以便可以与计算值进行匹配。在其他子查询中,需要使用WHERE子句中的列,而不是别名
SELECT 'section' AS colTYPE, title_sec AS title,
CONCAT_WS(' ',contentcol1_sec, contentcol2_sec, contentcol3_sec) AS content,
active_sec AS active
FROM sections_sec
HAVING content LIKE 'fff' OR title LIKE 'fff' AND active = 1
UNION
SELECT 'latest' AS colTYPE, title_lat AS title,
content_lat AS content, active_lat AS active
FROM latest_lat
WHERE content_lat LIKE 'fff' OR title_lat LIKE 'fff' AND active_lat = 1
UNION
SELECT 'project' AS colTYPE, title_prj AS title,
content_prj AS content, active_prj AS active
FROM projects_prj
WHERE content_prj LIKE 'fff' OR title_prj LIKE 'fff' AND active_prj = 1
此外,请确保您了解条件表达式中AND和OR混合的优先级。x或y或z被解析为x或y和z,而不是x或y和z。在第一个子查询中,您必须使用HAVING,以便可以与计算值进行匹配。在其他子查询中,需要使用WHERE子句中的列,而不是别名
SELECT 'section' AS colTYPE, title_sec AS title,
CONCAT_WS(' ',contentcol1_sec, contentcol2_sec, contentcol3_sec) AS content,
active_sec AS active
FROM sections_sec
HAVING content LIKE 'fff' OR title LIKE 'fff' AND active = 1
UNION
SELECT 'latest' AS colTYPE, title_lat AS title,
content_lat AS content, active_lat AS active
FROM latest_lat
WHERE content_lat LIKE 'fff' OR title_lat LIKE 'fff' AND active_lat = 1
UNION
SELECT 'project' AS colTYPE, title_prj AS title,
content_prj AS content, active_prj AS active
FROM projects_prj
WHERE content_prj LIKE 'fff' OR title_prj LIKE 'fff' AND active_prj = 1
此外,请确保您了解条件表达式中AND和OR混合的优先级。x或y或z被解析为x或y和z,而不是x或y和z。我刚刚在阅读另一个线程时遇到了union,union all和union之间的区别是什么?我仍然收到一个错误:“where子句”中的未知列“内容”都会堆叠您的结果。UNION还将删除重复项,这需要更多的时间。@DizzyBryanHigh我不知道您的表架构是什么,所以我无法帮助您处理内容列。该错误通常意味着该列不存在。如果需要根据concat的结果进行筛选,则必须使用HAVING而不是WHERE。我在这里阅读另一个线程时遇到union,union all和union之间有什么区别?我仍然收到一个错误:“where子句”中的未知列“content”都会堆叠您的结果。UNION还将删除重复项,这需要更多的时间。@DizzyBryanHigh我不知道您的表架构是什么,所以我无法帮助您处理内容列。该错误通常意味着该列不存在。如果需要根据concat的结果进行筛选,则必须使用HAVING而不是WHERE。为什么要将其放在第一个并集之前?错误代码表示该代码中的语法不正确。>您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解使用>的正确语法,在第3行选择“最新”作为colTYPE,title_lat作为title,content_lat作为conten为什么放在第一个union之前?错误代码表示该代码中的语法不正确。>您的SQL语法有错误;查看与您的MySQL服务器版本对应的>手册,了解使用>的正确语法,在第3行选择“最新”作为colTYPE,title_lat作为title,content_lat作为conten