【问题标题】:Select between multiple lines在多行之间选择
【发布时间】:2016-12-06 13:07:14
【问题描述】:

我有这种情况:

我需要从 tableA 中选择数据,它的外键是 tableB 比如:tableA.tableB_id = tableB id 通知

第二个限制是tableB上告知的邮政编码,tableB中有初始邮政编码和最终邮政编码,tableA上有一个单独的邮政编码。

例子:

CREATE TABLE tableA (
    id integer PRIMARY KEY,
    tableB_id INTEGER,
    postalCode varchar(10)
);

CREATE TABLE tableB (
    id integer PRIMARY KEY,
    InitialPostalCode varchar(10),
    FinalPostalCode varchar(10)
); 

表 B 是具有多个初始和最终邮政编码的位置的列表

我需要从 tableA 中进行选择,其中 tableB_id = tableB.id OR tableA.cep 介于 tableB.InitialPostalCode 和 tableB.FinalPostalCode

SELECT
    id,
    postalCode
FROM
    tableA
WHERE
    tableB_id = ID
    OR postalCode BETWEEN...


SELECT
    InitialPostalCode,
    FinalPostalCode
FROM
    tableB
WHERE
    id = some ID;

如何合并这两个查询?

谢谢大家!

【问题讨论】:

  • join on b.id=a.b_id or a.cep between b.initial and b.final?

标签: sql


【解决方案1】:

这是你想要的吗?

SELECT a.id, a.postalCode
FROM tableA a
WHERE EXISTS (SELECT 1 FROM tableB b WHERE b.id = a.tableB_id) OR
      EXISTS (SELECT 1 FROM tableB b WHERE a.cep BETWEEN b.InitialPostalCode AND b.FinalPostalCode);

我更喜欢使用EXISTS,因为:

  • 您只需要来自tableA 的列,因此tableB 不需要出现在FROM 子句中。
  • 每个子查询都可以使用适当的索引进行优化。
  • 处理后没有理由删除重复项。
  • ORON 子句中的效率可能非常低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多