猜猜有类似的问题,答案可能很容易,但我无法帮助自己,这就是为什么我问你们。
我在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天开始运行这个“神秘”。
答案 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。在广播废话前请更加了解您的事实。