猜猜有类似的问题,安斯瓦德可能很容易,但我无法控制自己,这就是我问你们的原因。
我在数据库中有一些数据(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-81
的INVENTUR
行为 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。在广播废话之前,请更加了解您的事实。