有没有什么办法在Interbase firebird的一个选择过程中有两个不同的where子句?有没有什么办法在Interbase firebird的一个选择过程中有两个不同的where子句?
我创建了两个表来支持这个问题。所需的输出是,即使表SAMPLE_DOUBLE中没有SINGLE_PK,选择过程也会显示表SAMPLE_SINGLE中的所有数据。
CREATE TABLE SAMPLE_SINGLE (
SINGLE_PK SMALLINT NOT NULL,
SINGLE_NAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
SINGLE_AMOUNT SMALLINT,
SINGLE_QUANTITY SMALLINT);
CREATE TABLE SAMPLE_DOUBLE (
DOUBLE_PK SMALLINT NOT NULL,
SINGLE_PK SMALLINT,
DOUBLE_QUANTITY SMALLINT);
CREATE PROCEDURE SELECT_FROM2TABLES
RETURNS(
SINGLE_NAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
SINGLE_AMOUNT SMALLINT,
SINGLE_QUANTITY SMALLINT,
TOTAL_DOUBLE_QUANTITY SMALLINT,
REMAINING_QUANTITY SMALLINT)
AS
BEGIN
FOR
SELECT
A.SINGLE_NAME,
A.SINGLE_AMOUNT,
A.SINGLE_QUANTITY,
SUM(B.DOUBLE_QUANTITY),
A.SINGLE_QUANTITY - SUM(B.DOUBLE_QUANTITY)
FROM SAMPLE_SINGLE A, SAMPLE_DOUBLE B
WHERE A.SINGLE_PK = B.SINGLE_PK
GROUP BY
A.SINGLE_NAME,
A.SINGLE_AMOUNT,
A.SINGLE_QUANTITY
INTO
:SINGLE_NAME,
:SINGLE_AMOUNT,
:SINGLE_QUANTITY,
:TOTAL_DOUBLE_QUANTITY,
:REMAINING_QUANTITY
DO
BEGIN
SUSPEND;
END
END;
对于此选择过程只会显示从具有本表SAMPLE_DOUBLE因为
FROM SAMPLE_SINGLE A, SAMPLE_DOUBLE B
WHERE A.SINGLE_PK = B.SINGLE_PK
我还要显示从表A的数据的SINGLE_PK表SAMPLE_SINGLE数据中不存在表B.
这里是样本数据,
Table A (SAMPLE_SINGLE) SINGLE_PK SINGLE_NAME SINGLE_AMOUNT SINGLE_QUNATITY
1 asdf 100 5
2 qwer 50 7
Table B (SAMPLE_DOUBLE) DOUBLE_PK SINGLE_PK DOUBLE_QUANTITY
1 1 3
我在选择过程所需的输出,
SINGLE_NAME SINGLE_AMOUNT SINGLE_QUANTITY TOTAL_DOUBLE_QUANTITY RMAINING_QUANTITY
asdf 100 5 3 2
qwer 50 7 0 7
这里是因为WHERE A.SINGLE_PK = B.SINGLE_PK,它将只显示第一行的上述过程的实际结果,
SINGLE_NAME SINGLE_AMOUNT SINGLE_QUANTITY TOTAL_DOUBLE_QUANTITY RMAINING_QUANTITY
asdf 100 5 3 2
Interbase和Firebird不是同一个数据库系统。在过去的18年中,他们已经发生了很多分歧,所以你不能依靠一个人的回答来申请另一个人。所以选择:Firebird或者interbase –