-1

我正在使用一个没有join子句(左连接、右连接、内连接、外连接)的旧数据库调用 Centura Gupta。所以我需要使用where来替换outer join我需要的:

SELECT *
FROM table1
OUTER JOIN table2
ON table1.id_person table2.id_person;

我认为where只能替换inner join

SELECT *
FROM table1
WHERE table1.id_person = table2.id_person;
4

4 回答 4

0

当我不知道 JOIN 时,我使用了这种实现。可能不完全正确,但可以让您接近:

SELECT *
FROM table1 t1, table2 t2
WHERE t1.id_Person=t2.id_Person;
于 2021-01-28T15:52:58.597 回答
0

'名为 Centura Gupta 的旧数据库' ??
也许您实际上是指OpenText Gupta SQLBase - 这绝不是“旧的”。
您可能正在运行 SQLBase 的“旧”版本——但它现在已升级到 v12.2 本机 64 位,并且肯定支持外连接。您可以使用本机 Gupta 外连接 - 类似于 Oracle (+) 或标准 ANSI 外连接。
如果要使用 ANSI OUTER 联接,请在服务器端 Sql.ini 中指定 'ANSIJoinSyntax=1'

转到此处了解更多 SQLBase Join 语法:Gupta SQLBase Manuals

原生 Gupta 外连接:

SELECT t1.id_person, t2.id_person
From table1 t1, table t2
where t1.id_person = t2.id_person(+)

ANSI 外连接:

SELECT t1.person_id, t2.person_id   
From table1 t1
Left Outer Join table2 t2 ON t1.id_person = t2.id_person
Where <what ever filter you want>

转到此处了解更多 SQLBase Join 语法:Gupta SQLBase Manuals

于 2021-01-29T01:57:11.790 回答
0

我不知道那个特定的数据库,但是您也许可以使用相关的子查询来获取“加入”的数据。这将从 中提取所有记录table1和相关信息,如果没有匹配,则为table2NULL :whatever4whatever5id_persontable2

SELECT t1.whatever1
    , t1.whatever2
    , t1.whatever3
    , (SELECT whatever4 FROM table2 AS t2 WHERE t2.id_person = t1.id_person) AS whatever4
    , (SELECT whatever5 FROM table2 AS t2 WHERE t2.id_person = t1.id_person) AS whatever5
FROM table1 AS t1
于 2021-01-28T19:52:48.217 回答
0

您可以尝试使用子查询而不是加入

SELECT *
FROM table1 t1
WHERE id_Person IN 
(
SELECT id_Person
FROM table2 
)
于 2021-01-28T14:46:45.843 回答