【问题标题】:SQL: How to use WHERE instead of OUTER JOINSQL:如何使用 WHERE 而不是 OUTER JOIN
【发布时间】:2021-01-28 14:38:25
【问题描述】:

我正在使用一个旧的数据库调用 Centura Gupta,它没有 join 子句(左连接、右连接、内连接、外连接)。所以我需要用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;

【问题讨论】:

  • (1) 没有OUTER JOIN 这样的东西。 (2) 使用您真正使用的数据库进行标记。我知道没有任何数据库不支持JOIN,并且在过去的 15 年里都没有(所以我很好奇)。 (3) 提供样本数据和期望的结果。
  • 您需要FULL JOIN 吗?还是只左/右加入?顺便说一句:您的第二个查询中缺少 table2。
  • 根据我的搜索,我想知道这是否是 OpenText SQLBase。这个语法指南看起来很有帮助。有一个关于连接的部分,包括“外部连接”:apachepersonal.miun.se/~parfor/databaser00/lang.pdf
  • 逗号是交叉连接(优先级低于关键字连接),内连接是交叉连接。通过 join 表示左和其他外连接是一个常见问题。用交叉连接表示连接 & 常见问题解答在哪里。

标签: sql join where-clause sqlbase


【解决方案1】:

您可以尝试使用子查询而不是连接

SELECT *
FROM table1 t1
WHERE id_Person IN 
(
SELECT id_Person
FROM table2 
)

【讨论】:

  • 这不等同于 JOIN。
  • 好的,请提供您需要的列名和表名。我会更新子查询
【解决方案2】:

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

SELECT *
FROM table1 t1, table2 t2
WHERE t1.id_Person=t2.id_Person;

【讨论】:

    【解决方案3】:

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

    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
    

    【讨论】:

      【解决方案4】:

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

      点击此处了解更多 SQLBase Join 语法:Gupta SQLBase Manuals

      本地 Gupta 外连接:

      选择 t1.id_person, t2.id_person
      从表 t1 ,表 t2
      其中 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 2020-03-09
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多