SQL select返回额外的结果

时间:2016-01-19 10:36:26

标签: sql sqlbase centura

猜猜有类似的问题,答案可能很容易,但我无法帮助自己,这就是为什么我问你们。

我在DB中有一些数据(Centura / Gupta SQLBase 7) 没有左/右连接可能 - 显然没有在sqlbase sql中实现

这是我的选择

SELECT 
    I.IARTNR, 
    L.ARTNAME 
FROM 
    INVENTUR I,
    LAGER L 
WHERE 
    L.ARTSTR = I.IARTNR 
AND
    I.AB = '2015-81';

返回20行,而不是18行。

INVENTUR设置为AB

2015-81行为18,而LAGER中的行为<3000行。我要做的是选择所有文章von INVENTUR并添加用LAGER写的文章名称。

我的选择有什么问题?从3天开始运行这个“神秘”。

3 个答案:

答案 0 :(得分:1)

外部/内部联接的ANSI连接语法在v8.5及更高版本中添加(现在高达v12.1)。 在v8.5之前,您可以使用本机Gupta外部/内部联接语法,例如

SELECT t1.col1,t2.col1,t1.col2,t2.col2
FROM t1,t2
WHERE t1.col1 = t2.col1(+)
AND   t1.col2 = t2.col2(+)

下一个示例列出了客户名称及其订单号,包括未下订单的客户:

SELECT CUSTOMER.CUSTNO,NAME
FROM CUSTOMER,ORDERS
WHERE CUSTOMER.CUSTNO = ORDERS.CUSTNO(*)

在SQLBase v8.5 onmwards中使用ANSI语法的相同查询是:

SELECT CUSTOMER.CUSTNO,NAME 
FROM CUSTOMER LEFT OUTER JOIN ORDERS ON CUSTOMER.CUSTNO = ORDERS.CUSTNO

答案 1 :(得分:0)

使用显式连接。

SELECT I.IARTNR, L.ARTNAME 
FROM INVENTUR I
INNER JOIN LAGER L ON I.IARTNR = L.ARTSTR
WHERE I.AB = '2015-81';

如果需要DISTINCT

SELECT DISTINCT I.IARTNR, L.ARTNAME 
FROM INVENTUR I
INNER JOIN LAGER L ON I.IARTNR = L.ARTSTR
WHERE I.AB = '2015-81';

答案 2 :(得分:0)

当然SQLBase有内/外连接! Native语法(使用(+))或ANSI。
这是语法:

NATIVE: SELECT t1.col1,t2.col1,t1.col2,t2.col2 从t1,t2 在哪里t1.col1 = t2.col1(+)AND t1.col2 = t2.col2(+);

ANSI: SELECT t1.col1,t2.col1,t1.col2,t2.col2 从t2右外联接t1 ON t1.col1 = t2.col1 AND t1.col2 = t2.col2;

P.S。 SQLBase并不奇怪&#39;数据库。最近发布的v12每次都会在性能,占用空间和总体拥有成本方面超过SQLServer。在广播废话前请更加了解您的事实。