使用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