使用另一个临时表中的条件创建和查询临时表

时间:2016-02-09 07:23:25

标签: sql oracle temp-tables

我创建了两个临时表,我想查询结果

Adam Eats Rasins     Fork Life
Dan  Eats Hotpockets At   Home

下面是我用来生成两个临时表的代码和我运行的查询,它获取了所有三行。

CREATE GLOBAL TEMPORARY TABLE TABI (AAA CHAR(20), AAB CHAR(20), AAC CHAR(20), 
AAD CHAR(20), AAE CHAR(20));

INSERT INTO TABI VALUES('Tim','Eats','Corn','Fork','Work');
INSERT INTO TABI VALUES('Adam','Eats','Rasins','Fork','Life');
INSERT INTO TABI VALUES('Dan','Eats','Hotpockets','At','Home');

CREATE GLOBAL TEMPORARY TABLE CRIT (CRIV CHAR(4));

INSERT INTO CRIT VALUES('CORN');

SELECT TABI.*
FROM TABI, CRIT
WHERE UPPER(TABI.AAC) NOT LIKE CRIT.CRIV;

我现在的问题是,当我希望它用Adam和Dan获取两行时,它会获取所有三行,但不是Tim。表一有五列,表二只有一列。

我不喜欢吗?我可以使用下面的代码,我将成功只用Tim生成一行。

SELECT TABI.*
FROM TABI, CRIT
WHERE UPPER(TABI.AAC) = CRIT.CRIV;

3 个答案:

答案 0 :(得分:0)

!=可以使用。 您也可以使用类似的语法:

SELECT TABI.*
FROM TABI, CRIT
WHERE UPPER(TABI.AAC) <> CRIT.CRIV;

或其他变体:

SELECT TABI.*
FROM TABI t
LEFT JOIN CRIT c ON (UPPER(t.AAC) = c.CRIV)
WHERE c.CRIV IS NULL;

答案 1 :(得分:0)

使用Not In Clause:

SELECT TABI.*
FROM TABI, CRIT
WHERE UPPER(TABI.AAC) Not IN( CRIT.CRIV);

答案 2 :(得分:0)

我了解您需要从TABI中提取CRIT中的“不存在”行SELECT TABI.* FROM TABI WHERE NOT EXISTS ( SELECT 1 FROM CRIT WHERE UPPER(TABI.AAC) = CRIT.CRIV ) 中的匹配行;那就是:

contents: [
 { title: "some title", content_type: 2 },
 { title: "some title", content_type: 2 },
 { title: "some title", content_type: 1 },
 { title: "some title", content_type: 2 },
 { title: "some title", content_type: 1 },
]