SQL 选择返回额外的结果



猜猜有类似的问题,安斯瓦德可能很容易,但我无法控制自己,这就是我问你们的原因。

我在数据库中有一些数据(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 行,而不是 expactized 的 18 行。

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

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

v8.5以后添加了用于外部/内部连接的ANSI连接语法(现在到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 中使用 ANSI 语法的相同查询是:

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

使用显式连接。

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';

当然,SQLBase 有内/外连接!本机语法(使用 (+) )或 ANSI 。
语法如下:

本地:选择 t1.col1、t2.col1、t1.col2、t2.col2从 T1、T2其中 t1.col1 = t2.col1 (+) 和 t1.col2 = t2.col2 (+);

ANSI:选择 t1.col1、t2.col1、t1.col2、t2.col2从 T2 右外连接 T1在 t1.col1 = t2.col1 上和 t1.col2 = t2.col2 ;

附言SQLBase不是"奇怪"的数据库。 最近发布的v12在性能,占用空间和总体拥有成本方面每次都会超过SQLServer。在广播废话之前,请更加了解您的事实。

相关内容

  • 没有找到相关文章

最新更新