【问题标题】:Changing data types and using LIKE in LEFT OUTER JOIN更改数据类型并在 LEFT OUTER JOIN 中使用 LIKE
【发布时间】:2016-09-10 19:35:13
【问题描述】:

我使用的数据库在我看来不是以最直观的方式设置的。我有两个要加入的表。 store 表包含有关商店的信息,并有一个 store_id 字段,该字段以 varchar 格式存储为 7 位数字。事务表有一个 transaction_id 字段,该字段设置为 hstore 并存储为“package_id”=>“10000417”。我正在尝试加入这些字段上的两个表。

我尝试将 transaction_id 字段转换为 varchar,同时尝试在 join 语句中使用子查询将“package_id”=>”部分添加到 store_id 字段。没有结果。所以我尝试了在JOIN语句中使用LIKE添加通配符,还是有问题,下面是我在使用LIKE时尝试的代码:

SELECT t.amount
    ,t.quantity_sold
    ,t.unit
    ,cast(t.transaction_details as varchar) as join_field
    ,s.product_name
    ,s.product_category
    ,s.metrc_id
FROM transactions t
LEFT JOIN store_info s ON t.transaction_details = s.store_id
WHERE t.transaction_details LIKE '%store_id%'

我尝试了许多其他变体。我希望有人可以为我提供一个关于尝试链接这两个表的更好方向的提示。

提前致谢,

编辑

我习惯于使用 SQL Server 而不是 Postgresql。从那以后,我对 hstore 数据类型进行了更多研究,并且对它的理解稍好一些。我仍然无法加入这两个表。我设法使用以下查询创建了一个只有 ID 号的新列。

SELECT *, transaction_details->'package_id' as ID
FROM transactions

我试图通过调用该列来加入但无济于事,所以我尝试了以下方法:

SELECT *
FROM transactions t
LEFT JOIN store_info s ON t.transaction_details->'package_id' = s.store_id

我还尝试使用以下方法强制转换为整数或 varchar

SELECT *
FROM transactions t
LEFT JOIN store_info s ON cast(t.transaction_details->'package_id' 
as varchar) = s.store_id

对不起,我是个菜鸟。感谢您的帮助。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您的代码不起作用有两个原因。

    1. 根据您对这些列中值的描述,商店 ID 和交易详情不匹配。
    2. like 模式只是一个看起来像'%store_id%' 的字符串。列值不在字符串中(请参阅下文了解如何执行此操作)。

    你需要这样的东西:

    SELECT . . .
    FROM transactions t LEFT JOIN
         store_info s
         ON t.transaction_details LIKE '%' || s.store_id || '%';
    

    但是,我怀疑这确实需要你想要的。 store id应该在交易详情的开头或结尾,提示:

         ON t.transaction_details LIKE '%' || s.store_id
    

    或:

         ON t.transaction_details LIKE s.store_id || '%'
    

    而且,你说得对,这是一个非常糟糕的数据结构。至少,ETL 过程应该从事务中解析出商店信息。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2020-01-10
      • 2020-04-10
      • 2010-09-29
      • 1970-01-01
      • 2014-08-10
      • 2011-01-02
      • 2013-03-10
      相关资源
      最近更新 更多