#1222 - 使用的SELECT语句具有不同的列数

时间:2017-08-29 08:23:46

标签: mysql sql

我正在使用此查询,但是我收到此错误。

SELECT `pr_name`  AS type FROM `details` 
    WHERE CONVERT(`pr_name` USING utf8) LIKE '%". $text. "%' 
    OR CONVERT(`pr_desc` USING utf8) LIKE '%". $text. "%'
UNION 
SELECT `pr_name`,`dev_name`  as type FROM `devices` 
    WHERE CONVERT(`dev_name` USING utf8) LIKE '%". $text. "%' 
    OR CONVERT(`dev_desc` USING utf8) LIKE '%". $text. "%'
UNION 
SELECT  `dev_name` AS type FROM `clinic` 
    WHERE CONVERT(`clinic_desc` USING utf8) LIKE '%". $text. "%'

3 个答案:

答案 0 :(得分:2)

要创建UNION,每个子查询都需要具有相同的列数。

此处第一个选择仅返回pr_name,第二个选择也返回dev_name

使第二个子查询只返回一列,或者将第二列添加到其他子查询。

答案 1 :(得分:0)

第二个查询选择两列,其他只有一列。改为:

SELECT `pr_name`  AS type,null FROM `details` WHERE CONVERT(`pr_name` USING utf8) LIKE '%". $text. "%' OR CONVERT(`pr_desc` USING utf8) LIKE '%". $text. "%'
UNION 
SELECT `pr_name`,`dev_name`  as type FROM `devices` WHERE CONVERT(`dev_name` USING utf8) LIKE '%". $text. "%' OR CONVERT(`dev_desc` USING utf8) LIKE '%". $text. "%'
UNION 
SELECT  `dev_name` AS type,null FROM `clinic` WHERE CONVERT(`clinic_desc` USING utf8) LIKE '%". $text. "%'

或删除第二个选择中的第二列。或者你需要一个逻辑来制作一列中的一列。

答案 2 :(得分:0)

您需要在第一个和最后一个查询(' ')中添加一个空字符串列作为dev_name,或者在中间查询中连接'pr_name'+' - ' +'dev_name'。与UNION一样,每个结果集必须包含相同数量的列。