在rails中创建查询,我非常确定活动记录不支持此类查询。
有四个表(产品,公司,商店和product_inventories)
Product_Inventory表包含product_id,company_id,store_id。公司可能有也可能没有多家商店(百思买会有很多商店,而亚马逊有1家商店)。如果一行只包含产品和公司所有商店都带有产品,但如果它包含商店,则它仅适用于该商店。
Product -> Product_Inventory -> Companies -> Stores
OR
Product -> Product_Inventory -> Stores
目标:我希望能够查询产品并找到所有产品的位置。
我有什么:
SELECT DISTINCT s.*, c.* FROM product_inventory p_inv
INNER JOIN stores s ON
( p_inv.store_id = s.id #SKIP when p_inv.store_id IS NULL
OR
p_inv.company_id = s.company_id ) #SKIP when p_inv.store_id IS NOT NULL
INNER JOIN companies c ON s.company_id = c.id
WHERE p_inv.product_id = 1
答案 0 :(得分:0)
所以,你的表基本上是这样的:
Table pr_inv
p_id, c_id, s_id
1 1 NULL
2 1 1
3 1 2
4 2 NULL
Table products
pid
1
2
3
4
Table companies
cid
1
2
Table stores
sid
1
2
最后,您希望获得公司拥有的所有商店。 (我正在倒退)。
首先,您希望获得所有拥有产品的公司。
SELECT DISTINCT c.* FROM (
SELECT * FROM pr_inv WHERE p_id = 1
) as prod_id
INNER JOIN
companies as c
ON prod_id.c_id = c.cid
这将返回所有拥有该产品的公司。这就是你已经拥有的部分。
SELECT DISTINCT s.* FROM (
SELECT * FROM pr_inv WHERE p_id = 1
) as prod_id
INNER JOIN
stores as s
ON prod_id.s_id = s.sid
这将获得您感兴趣的所有商店,除非商店为空。
SELECT s.* FROM (
SELECT * FROM pr_inv WHERE p_id = 1 AND stores = null
) as prod_id
INNER JOIN company as c ON pr_inv.c_id = c.cid
LEFT JOIN stores as s ON s.cid = c.cid
这将获得您对商店为空的所有商店感兴趣。最后,您可以使用JOIN将查询挂钩。