2017-08-29 79 views
-5

我正在使用此查询并收到此错误。 #1222 - 使用的SELECT语句具有不同数量的列

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. "%' 
+2

*寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建一个最小化,完整和可验证的示例。* – Script47

回答

2

要生成一个UNION,每个子查询都需要有相同数量的列。

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

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

+0

它可以工作,但它只返回来自第一个查询的结果。如果在第一个select statement.how中找不到关键字,它似乎返回其他表的结果。所有的结果? – efns

+0

@efns请您尝试谷歌和手册之前,你问绝对基本常见问题解答应该downvoted&closed&既不问也不回答。 – philipxy

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. "%' 

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

0

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