无法联合Select和Inner Join

时间:2013-08-26 20:12:16

标签: mysql sql

在为公司开发系统时,我遇到了两难困境,而项目管理并非如此!

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

毫不费力地工作

3 个答案:

答案 0 :(得分:2)

要使用UNION,您必须:

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

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

  3. 第一个请求中有5列:

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

    和第2个请求中的1列:

    clients_fans.Fan
    

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

答案 1 :(得分: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  

答案 2 :(得分:1)

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

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