【问题标题】:How to select a record if it is equal to any record of a column from a different table?如果记录等于来自不同表的列的任何记录,如何选择记录?
【发布时间】:2020-02-13 10:32:51
【问题描述】:

我有一个带有地址的表格,这些表格用空格分隔成不同的列。由于街道的名称可以由 1-2-3 等部分组成,因此街道的名称被放置在不同的列中。 我有一个可能的街道 suffices 列表,我想检查列并选择与任何街道 suffices 匹配的记录。

例如,如果我有这样的表:

C1 C2 C3 C4
----------------------
艾比路
组成的街道
其他一些奇怪的车道
时代广场

而且我还有一张包含可能满足的“列表”的表格:

C5
--------
大街
路
街道
大大地
车道
正方形
驾驶
林荫大道
等等...

我想要的是这样的:

C5
--------
路
街道
车道
正方形

有没有可能的方法来做到这一点?我一直在寻找类似的问题,但找不到任何问题。

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题。另外,当多个后缀匹配时会发生什么?或者当没有后缀匹配时?

标签: sql list select conditional-statements


【解决方案1】:

您可以使用IN 作为条件连接两个表:

SELECT *
FROM table_1 t1
JOIN table_2 t2
  ON t2.C5 IN (t1.c1, t1.c2, t1.c3, t1.c4)

【讨论】:

  • 非常感谢,它运行完美,非常简单!我认为这会更加困难。
【解决方案2】:

您可以使用join 获取匹配项:

select t.*, l.c5
from table1 t1 join
     list l
     on l.c5 in (t1.c1, t1.c2, t1.c3, t1.c4);

但是,当有多个匹配项时,这可能会从第一个表返回多行。

在您的示例数据中,您可能只想匹配 last 列。如果是这样:

select t.*, l.c5
from table1 t1 join
     list l
     on l.c5 = coalesce(t1.c4, t1.c3, t1.c2, t1.c1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多