1

我在为公司开发系统时遇到了两难境地,而项目管理不是!

SELECT clients_owner.Name, clients_owner.`number`, clients_shops.Shopname, clients_shops.PostCode, clients_shops.Location
FROM clients_shops inner join clients_owner ON
clients_owner.ShopID = clients_shops.ShopID
UNION
SELECT clients_fans.Fan
FROM clients_shops inner join clients_fans ON
clients_shops.ShopID = clients_fans.ShopID

以下查询返回以下错误:

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

但是以此为例:Mysql JOIN (multiple) tables被标记为答案,所以查询显然是有效的。我哪里出错了?

而以下连接合并两个表:

SELECT
    clients_owner.Name, clients_owner.Number, clients_shops.Shopname, clients_shops.PostCode,
    clients_shops.Location FROM clients_shops INNER JOIN clients_owner on
    clients_owner.ShopID = clients_shops.ShopID

工作顺利

4

3 回答 3

2

联合意味着您在现有列下添加相同的列。在您的情况下,第一个查询中有 5 列,第二个查询中有 1 列:

|1|2|3|4|5
|1|

不匹配。

你需要的是另一个加入:

SELECT clients_owner.name,
       clients_owner.`number`,
       clients_shops.shopname,
       clients_shops.postcode,
       clients_shops.location,
       clients_fans.fan
FROM   clients_shops
       INNER JOIN clients_owner
               ON clients_owner.shopid = clients_shops.shopid
       LEFT JOIN clients_fans
              ON clients_fans.shopid = clients_shops.shopid  
于 2013-08-26T20:19:09.590 回答
2

要使用 UNION,您必须具备:

  1. 两个请求中的列数相同。

  2. 每个 SELECT 语句对应位置的列应具有相同的数据类型。

您在第一个请求中有 5 列:

clients_owner.Name,
clients_owner.`number`,
clients_shops.Shopname,
clients_shops.PostCode,
clients_shops.Location

和 2-nd 请求中的 1 列:

clients_fans.Fan

http://dev.mysql.com/doc/refman/5.0/en/union.html

于 2013-08-26T20:15:38.633 回答
1

如果您使用UNION,则两个 select 语句中的列数应该相等。

UNION 中的每个 SELECT 语句必须具有相同的列数

于 2013-08-26T20:17:41.717 回答