2016-09-10 14 views
0

私の意見では、最も直感的な方法で設定されていないデータベースを使用しています。私は参加しようとしている2つのテーブルを持っています。ストアテーブルはストアに関する情報を持ち、varcharフォーマットの7桁の数字として格納されるstore_idフィールドを持っています。トランザクションテーブルには、hstoreとして設定され、 "package_id" => "10000417"として格納されるtransaction_idフィールドがあります。私はこれらのフィールドに2つのテーブルを結合しようとしています。データ型を変更し、LEFTでLIKEを使用するOUTER JOIN

transaction_idフィールドをvarcharとしてキャストしようとしましたが、同時にjoinステートメントでサブクエリを使用してstore_idフィールドに "package_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%' 

を私は他のバリエーションの数を試してみましたが、私は誰かがヒントを提供することができます期待していますこの2つのテーブルをリンクしようとするより良い方向に私のために。

ありがとうございます。

EDIT

私は、PostgreSQLとは対照的にSQL Serverの使用に慣れています。私はその後、hstoreデータ型に関するより多くの研究を行い、それを少し良く理解しています。私はまだ2つのテーブルに参加することに問題があります。次のクエリを使用して、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 

このようなノブのために申し訳ありません。助けてくれてありがとう。

答えて

0

コードは2つの理由で機能しません。

  1. これらの列の値の説明では、ストアIDとトランザクションの詳細が一致しません。
  2. likeパターンは、単に'%store_id%'のような文字列です。列の値が文字列に含まれていません(これについては以下を参照してください)。

あなたはこのようなものが必要です。しかし、私はそれがどうなる疑う

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

は、あなたが欲しい欲しいです。店舗IDは、取引の詳細の先頭または末尾にあることを示唆している必要があります。

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

か:

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

をそして、あなたは、これは非常に悪いデータ構造であることが適切です。少なくとも、ETLプロセスはトランザクションからストア情報を解析する必要があります。

関連する問題