UNION SQL问题[重复]

Posted

技术标签:

【中文标题】UNION SQL问题[重复]【英文标题】:UNION SQL Issue [duplicate] 【发布时间】:2012-03-05 16:16:40 【问题描述】:

我最近注意到了 UNION 函数,在 W3Schools 上看到你可以合并两个表,但我想合并三个......我已经编写了一段代码,但是它不起作用,因为我得到一个错误。是否可以合并三个表,我该如何实现?谢谢!

错误:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\Legendary\new\search.php on line 54

代码:

            // Fill up array with names
            $sql2 = mysql_query("SELECT * FROM members UNION ALL SELECT * FROM clans UNION ALL SELECT * FROM tournaments"); 
            while($row=mysql_fetch_array($sql2)) 
                $a[]=$row['name'];
                $b[]=$row['id'];
            

【问题讨论】:

if($sql2 === FALSE)die(mysql_error()) 我很确定你想加入这些表而不是联合它们。另外,把你在 W3Schools 上读到的任何东西都带上一大粒盐:http://w3fools.com/ Joe Stefanelli,我会试试的,谢谢! W3Schools 页面在它的第 2 段中说:“请注意,UNION 中的每个 SELECT 语句必须具有相同数量的列。列也必须具有相似的数据类型。此外,每个 SELECT 中的列声明的顺序必须相同。”关于数据类型,这个陈述可能有争议,但无论如何你都应该遵循它。 不要将 W3SCHOOLS 视为资源。 【参考方案1】:

您需要从每个表中以相同的顺序返回相同数量的列和数据类型(因为mySQL 不支持 SQL 标准的UNION CORRESPONDING 语法)。如果表不完全匹配,但确实有一些您想要UNION 的类似列,那么在SELECT 子句中为UNION 的每个部分仅指定这些列。

即使表模式匹配,最好指定列名;否则将来向其中一个表添加一列会破坏查询。

例如,如果所有表都有一个名称列,您可以这样做:

select Name from members
UNION ALL
select Name from clans
UNION ALL
select Name from tournaments

【讨论】:

澄清一下:您需要拥有相同数量的列。您应该拥有相同的类型。 (后一个规则是灵活的。前一个不是。)【参考方案2】:

UNION 是一个 SQL 命令,用于在其他结果之上STACK结果,这就是为什么您需要相同数量的列的原因。如果您想查看某些成员参加了哪些氏族和锦标赛,那么您需要加入他们。

【讨论】:

以上是关于UNION SQL问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 sql union 中删除重复项

sql中union 和 union all的区别

SQL 中的 UNION 和UNION ALL 有啥区别?

SQL里 distinct 和 union 的区别?

使 SQL 查询返回重复行而不使用 UNION ALL 关闭

SQL 中的 UNION 和UNION ALL 有啥区别?