【问题标题】:Parsing a dash-delimited value in a SQL table and doing lookups解析 SQL 表中的破折号分隔值并进行查找
【发布时间】:2009-09-29 19:44:27
【问题描述】:

如何解析 SQL 表中的破折号分隔值并使用不同的解析出的值在其他表中进行查找?

假设我有 users.nationality,它是一个类似于“41-33-11”的 varchar。我有国家、城市和州表,这些表的 ID 分别为 41(“Buffalo”)、33(“NY”)和 11(“USA”)。

从用户中选择 users.name、users.email、users.nationality

国籍=“41-33-11”

如何制作 SELECT 语句以获得“Buffalo, NY, USA”?

【问题讨论】:

  • 您能否重新设计您的数据库架构,或者这是您需要使用的东西?我问是因为它看起来很糟糕的设计。
  • 多值字段是设计不佳的标志。
  • @DaveE:告诉我们你真正的感受 =)
  • 同意的家伙。不是我的数据库架构。叹息。

标签: sql mysql


【解决方案1】:

使用内联视图提取值,以便您可以加入它们:

JOIN (SELECT SUBSTR(t.nationality, 0, 2) AS city_id,
             SUBSTR(t.nationality, INSTR(t.nationality, '-')+1, 2) AS state_id,
             RIGHT(t.nationality, 2) AS country_id
        FROM USERS t) u
JOIN COUNTRY cntry ON cntry.country_id = u.country_id
JOIN CITY cty ON cty.city_id = u.cty_id
JOIN STATE st ON st.state_id = u.state_id

【讨论】:

    【解决方案2】:

    看看at this answer,特别看使用SUBSTRING_INDEX()

    【讨论】:

      【解决方案3】:

      mysql dev comments 中有很多字符串拆分解决方案,您可以通过它们在 WHERE IN 语句中使用拆分字符串。

      【讨论】:

        【解决方案4】:

        取决于您使用的 SQL。我通常会说使用您查询的语言更容易,例如使用 PHP 的 split()。如果是 MySQL,那么这篇文章应该会有所帮助: http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

        我认为 MS SQL 已经构建了拆分函数。

        【讨论】:

          猜你喜欢
          • 2016-09-12
          • 2016-06-29
          • 2021-01-11
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          • 1970-01-01
          • 2017-08-29
          • 1970-01-01
          相关资源
          最近更新 更多