2016-04-01 9 views
0

私は 'account_products'というテーブルを持っています。これらのテーブルには、外部キー 'product_id'とタイムスタンプ 'created_at'があります。SQL最初の列のINを使用して2番目の列を返します。

また、「製品」という表もあります。同じ 'product_id'に等しいidを持つすべての商品を 'accout_products'から返すようにしています。しかし、私はまた、 'account_products'から 'created_at'が必要です。なぜなら、それらがいつ作成されたかを見たいからです。

SELECT * FROM products 
WHERE id IN (
    SELECT product_id, created_at FROM account_products 
) 

が、IN句のみもaccount_productsの各列のためのcreated_atを返し、PRODUCT_IDに関連:

ので、SQLのような何かを伝える方法はありますか?

ありがとうございます!

+0

あなたは全くInを必要としません。あなたが望むと思われるものは、INNER JOINで行うことができます。実際のテーブルスキーマ、サンプルデータ、およびそのデータから取得したい出力を提供するには[編集]してください。 –

+0

'accounts_products'テーブルで' product_id'が* UNIQUE *の場合、 'JOIN'操作がうまくいくかもしれません。そうでない場合、JOINは 'product_id'に一致する値を持つ' accounts_products'のすべての*行に 'id'値をマッチさせる可能性があり、潜在的に結果に「重複」行を生成します。 – spencer7593

答えて

2

使用join

SELECT p.*, ap.created_at 
FROM products p JOIN 
    account_products ap 
    ON ap.product_id = p.id; 
+0

'product_id'が' account_products'で一意でなければ、このクエリは 'products'から重複した行を返す可能性があることを指摘しておきます。これを** 'id IN(2,2,3,3,3,4,4,4,4)' **と比較すると、リスト内の値と一致する 'id'値を持つ行は1回だけ返されます'IN'リストで何度も一致する値が繰り返されても、 – spencer7593

+0

ありがとうございます!うまくいった! –

関連する問題