2013-06-21 62 views
1

我有四个表想要加入并一起显示输出。我不确定Oracle SQL Developer的语法是如何工作的。我知道对于程序员来说这是一个简单的问题,我希望有人能够就代码的外观提出建议。在Oracle SQL Developer中加入表格

是:

JNL1 
JNL2 
JNL3 
JNL4 

是共同之间的这些表的所有四是ItemID的关键。

查询将如何?谢谢

+1

语法不是由工具(它是SQL Developer)而是由数据库系统(它是Oracle)确定的。查看关于如何编写连接的Oracle手册:http://docs.oracle.com/cd/E11882_01/server.112/e26088/queries006.htm#i2054012 –

回答

4

这实际上取决于你想要的连接类型(外部还是不是),但是你可以使用默认的SQL语法。

例如,接合而不JOIN关键字:

select * from JNL1, JNL2, JNL3, JNL4, 
where 
JNL1.ItemID = JNL2.ItemID AND 
JNL2.ItemID = JNL3.ItemID AND 
JNL3.ItemID = JNL4.ItemID; 

此外可以利用多个INNER JOINS例如的

SELECT whatever 
    FROM JNL1 AS a 
INNER 
    JOIN JNL2 AS b 
    ON b.ItemID = a.ItemID 
INNER 
    JOIN JNL2 AS c 
    ON c.ItemID = b.ItemID 
INNER 
    JOIN JNL2 AS d 
    ON d.ItemID = c.ItemID 
+1

谢谢,这个作品完美。 –

0

如果要输出来自的所有表中的行,并且如果每个表中的列相同,则UNION ALL将起作用。请注意,这是不是在数据库意义上的JOIN,虽然它种在一个英语语感:

SELECT * FROM JNL1 
UNION ALL SELECT * FROM JNL2 
UNION ALL SELECT * FROM JNL3 
UNION ALL SELECT * FROM JNL4 

如果需要,您可以添加一个ORDER BY到底。

UNIONUNION ALL类似,但它将省略所有值都重复的行。

+0

当我运行该命令时,它给了我这个错误:所有查询使用UNION,INTERSECT或EXCEPT运算符组合在目标列表中必须具有相同数量的表达式 –

+0

好的,这基本上意味着我误解了您的问题。我认为你可能意思是“加入”的意思是“追加” - 我猜测是因为没有表定义,我猜错了:)其他答案使用实际的数据库连接,所以他们可能是你想要的。 –

2

在Oracle工作,它会在其他数据库引擎:

SELECT * 
FROM JNL1 j1 
INNER JOIN JNL2 j2 ON j1.ItemID = j2.ItemID 
INNER JOIN JNL3 j3 ON j1.ItemID = j3.ItemID 
INNER JOIN JNL4 j4 ON j1.ItemID = j4.ItemID 

一个典型的Oracle存在语法错误,当你想LEFT JOIN

标准SQL:

SELECT * 
FROM JNL1 j1 
LEFT JOIN JNL2 j2 ON j1.ItemID = j2.ItemID 
LEFT JOIN JNL3 j3 ON j1.ItemID = j3.ItemID 
LEFT JOIN JNL4 j4 ON j1.ItemID = j4.ItemID 

等效于此Oracle语法:

SELECT * 
FROM JNL1 j1, 
JNL2 j2, 
JNL3 j3, 
JNL4 j4, 
WHERE j1.ItemID=j2.ItemID(+) 
AND j1.ItemID=j3.ItemID(+) 
AND j1.ItemID=j4.ItemID(+)