2016-04-01 20 views
0
'u döndürerek

'account_products' adlı bir tablonuz var. Bu 'yabancı bir' product_id 'anahtarına ve ayrıca' create_at 'zaman damgası var.SQL İlk sütunda IN kullanın ve ikinci

Ayrıca 'ürünler' adlı bir masa var. 'Accout_products' ile aynı 'product_id' değerine eşit olan tüm ürünleri iade etmeye çalışıyorum. AMA Ayrıca 'account_products' dan 'created_at' dosyasına da ihtiyacım var, çünkü ne zaman yaratıldıklarını görmek istiyorum.

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

ama İÇİNDE Madde sadece ayrıca account_products her sütun için created_at dönen, product_id ilgilidir:

Yani SQL gibi bir şey olduğunu anlamanın bir yolu var mı?

Teşekkürler!

+0

Sen hiç IN gerekmez. İstediğiniz şey bir INNER JOIN ile yapılabilir. Gerçek tablo şemalarınızı, bazı örnek verilerini ve bu verilerden elde etmek istediğiniz çıktıyı sağlamak için [değiştir] ederseniz, buradaki bir kişi muhtemelen yardımcı olabilir. –

+0

"accounts_products" tablosunda "product_id" * UNIQUE * öğesi ise "JOIN" işlemi sizin için işe yarayabilir. Öyle değilse, JOIN, "id" değerinizle "product_id" içinde eşleşen bir değere sahip olan account_products öğesinden * her * satırıyla eşleme potansiyeline sahiptir. Bu, sonuçta potansiyel olarak "çift" satırlar üretebilir. – spencer7593

cevap

2

kullanın join:

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

"product_id", "account_products" öğesinde benzersiz değilse, bu sorgu, "ürünler" in yinelenen satırlarını döndürme potansiyeline sahip olduğuna işaret etmelidir. ** 'id IN (2,2,3,3,3,4,4,4,4)' ** seçeneğine, listedeki bir değere karşılık gelen 'id' değerine sahip bir satırın yalnızca bir kez iade edileceği 'IN' listesinde eşleştirme değeri kaç kez tekrarlanırsa bulunsun. – spencer7593

+0

Çok teşekkür ederim! İyi çalıştı! –

İlgili konular