2017-08-29 66 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一樣,每個結果集必須包含相同數量的列。

相關問題