0

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

我在数据库中有一些数据(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 行。

INVENTURAB设置为2015-8118的行,LAGER其中有<3000行。我要做的是选择所有文章 vonINVENTUR并添加写在LAGER.

我的选择有什么问题?自 3 天以来运行这个“神秘”。

4

3 回答 3

1

从 v8.5 开始(现在到 v12.1)添加了外部/内部连接的 ANSI 连接语法。在 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
于 2017-10-03T01:03:29.813 回答
0

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

原生:从 t1、t2 中选择 t1.col1、t2.col1、t1.col2、t2.col2,其中 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;

ps SQLBase 不是“奇怪”的数据库。最近发布的 v12 在性能、占用空间和总体拥有成本方面每次都超过 SQLServer。在传播废话之前,请多了解您的事实。

于 2016-01-20T09:43:40.257 回答
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';
于 2016-01-19T10:42:07.923 回答