Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 三个或多个表使用公共键联接_Mysql_Sql_Sql Server_Oracle11g_Db2 - Fatal编程技术网

Mysql 三个或多个表使用公共键联接

Mysql 三个或多个表使用公共键联接,mysql,sql,sql-server,oracle11g,db2,Mysql,Sql,Sql Server,Oracle11g,Db2,这适用于任何RDBMS吗 CREATE TABLE TBLA (MYKEY CHAR (10 ), FLDA CHAR (10 )); CREATE TABLE TBLB (MYKEY CHAR (10 ), FLDB CHAR (10 )); CREATE TABLE TBLC (MYKEY CHAR (10 ), FLDC CHAR (10 )); 查询: select mykey, flda, fldb, fldc from tbl

这适用于任何RDBMS吗

CREATE TABLE TBLA (MYKEY CHAR (10 ), FLDA CHAR (10 ));
CREATE TABLE TBLB (MYKEY CHAR (10 ), FLDB CHAR (10 ));                          
CREATE TABLE TBLC (MYKEY CHAR (10 ), FLDC CHAR (10 ));
查询:

select mykey, flda, fldb, fldc  
from tbla                       
  join tblb using (mykey)       
  join tblc using (mykey) 
也许有一个明确的连接顺序

select mykey, flda, fldb, fldc  
from ((tbla                       
          join tblb using (mykey))
      join tblc using (mykey))
它在DB2forIBMi7.1中似乎不起作用……我得到了一个SQL0203-名称MYKEY在第二次使用(MYKEY)

我想知道其他数据库管理系统

SQL Fiddler展示了它与Oracle 11gR2和MySQL 5.6.6 m9一起工作……但不是MS SQL Server 2012;它显然不支持使用语法进行连接。


很高兴能得到那些DBs的实际用户和其他任何插话者的一些确认;尤其是DB2 for LUW。

您应该为表使用别名

select a.mykey, a.flda, b.fldb, c.fldc  
from tbla a                      
  join tblb b on a.mykey = b.mykey       
  join tblc c on b.mykey = c.mykey 

我认为,
JOIN..USING
语法对DB2LUW无效。如果有多个联接,则对MYKEY的引用确实是不明确的。在Oracle中,它是自然联接的某种“扩展”。您可以在左/右/完全联接中使用它。限制:使用中使用的列在查询中的任何位置都不得有表别名。不,自然联接(
使用
)将在某些平台上工作,但不是在所有平台上。例如,SQL Server中没有这种支持。@Mustacio,很有趣……我没想到在DB2 LUW或z/OS之前,JOIN USING会被添加到DB2 For I中。@Multisync,从Oracle文档中可以看出,自然连接和使用是两件不同的事情。虽然从行为来看,我会使用自然连接的子集(?)调用。MySQL还将它们记录为两种不同的东西。尽管MySQL文档确实说“两个表的自然[LEFT]连接在语义上被定义为等同于一个内部连接或一个带有USING子句的LEFT连接,USING子句命名两个表中存在的所有列。”但我很清楚如何在上使用JOIN。我不是在问使用JOIN的替代方法。@Charles是的,但请注意第二个JOIN是如何通过在第一个中显式声明a.mykey,在第二个中显式声明b.mykey来解决歧义的。使用时,无法通过将A连接到C或B连接到C来说明如何创建第二个连接。@user2338816,但是使用显式括号指定连接顺序也应该消除任何歧义
(A join B)join C
,但我得到了相同的错误。@Charles我不太明白括号如何确保使用A.mykey或B.mykey中的哪一个。但它似乎非常学术化。只要没有特定的SQL标准来说明应该如何实现,而且我在ISO SQL 2006的文档中还没有看到,这就取决于供应商。不同的供应商可能实现不同的功能。无论如何,我同意这不重要;可行的实现是可能的。很明显,它只是没有在标准中定义。@user2338816,括号强制在考虑C之前连接B。使用using构建AB结果后,其中只有1个MYKEY列。因此,使用MYKEY连接到C是明确的。