繁体   English   中英

SQL SELECT 语句 - 不同的列数

[英]SQL SELECT statements - different number of columns

这个查询有什么问题?

sql error: #1222 - The used SELECT statements have a different number of columns
SELECT `id`,`firstname`,`lastname` FROM `users` WHERE `firstname` LIKE 
'%ned%' OR `lastname` LIKE '%ned%' 
OR CONCAT(`firstname`," ", `lastname`) LIKE '%ned%' 
OR CONCAT(`lastname`," ", `firstname`) LIKE '%ned%' 
UNION SELECT `users`.`id` FROM `users` LEFT JOIN `friends` ON `users`.`id`=`friends`.`user_id`

用户表

+------------------------------------------+
|   id   |  firstname | lastname | ....    |
|   1    |   Nedim    |  Kanat   |  ....   |
+------------------------------------------+

朋友桌

+-------------------------------------------+
|   id   |  user_id   | friend_id | ....    |
|   1    |   1        |  2        |  ....   |
+-------------------------------------------+

您不应该为此使用UNION 您应该这样使用查询:

SELECT `id`,`firstname`,`lastname`, (
    SELECT `users`.`id` FROM `users` LEFT JOIN `friends` ON `users`.`id`=`friends`.`user_id`
) AS `UserID` FROM `users` WHERE `firstname` LIKE 
'%ned%' OR `lastname` LIKE '%ned%' 
OR CONCAT(`firstname`," ", `lastname`) LIKE '%ned%' 
OR CONCAT(`lastname`," ", `firstname`) LIKE '%ned%'

区别

  • UNION用于添加为新行。
  • , () AS Column用于在同一行中添加为另一列。

联合是集合之间的数学运算。 这种操作要求两个表兼容,这意味着它们必须具有相同的列数和类型。 很明显,您正在尝试在 3 列 SELECT 和 1 列 SELECT 语句之间建立联合(LEFT JOIN 没有像您预期的那样添加其他 2 列,因为 SELECT 会在进行连接后投影表)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM