这是我要解决的问题:
Table1 包含产品 ID、日期和这些日期的价格,Table2 包含产品属性。
我希望能够根据一组属性比较客户在同一日期不同产品的价格。我很容易获得“简单”产品和“高级”产品的产品/日期/价格列表(见下文)。
我希望能够连接这两个表,使输出如下所示:
[CLIENT] [PRODUCT] [DATE] [SIM_PROD] [SIM_PRICE] [ADV_PROD] [ADV_PRICE]
这是我做的最远的
SELECT b.NAME AS ‘CLIENT’, a.NAME AS ‘SIMPLE_PRODUCT’, t1.DATE AS ‘DATE’, t1.PIVOT_PRICE AS ‘SIMPLE_PRICE’
FROM TABLE1 t1
LEFT JOIN PRODUCT a
ON t1.PRODUCT_ID = a_PRODUCT_ID
LEFT JOIN CLIENTS b
ON a.PARTNER_ID = b.PARTNER_ID
WHERE a.CRITERIA = TRUE;
SELECT b.NAME AS ‘CLIENT’, a.NAME AS ‘ADV_PRODUCT’, t2.DATE AS ‘DATE’, t2.PIVOT_PRICE AS ‘ADV_PRICE’
FROM TABLE1 t2
LEFT JOIN PRODUCT a
ON t2.PRODUCT_ID = a_PRODUCT_ID
LEFT JOIN CLIENTS b
ON a.PARTNER_ID = b.PARTNER_ID
WHERE a.CRITERIA = FALSE;
我已经能够构建类似的表,我从 TABLE1 中提取价格并将其标记为 t1,然后再次从 TABLE1 中提取价格并将其标记为 t2,但仅当使用 TABLE1 中的标准时,而不是表中的标准需要加入。
是否可以“设置”一个表(EG 简单表)然后“设置”第二个表(EG 高级表),然后在 PARTNER_ID 和 DATE 上加入它们?
最佳答案
可以加入两个子查询:
SELECT t1.client, t1.date, t1.simple_product, t1.simple_price, t2.adv_product, t2.adv_price
FROM (
SELECT b.NAME AS CLIENT, a.NAME AS SIMPLE_PRODUCT, t1.DATE, t1.PIVOT_PRICE AS SIMPLE_PRICE
FROM TABLE1 t1
LEFT JOIN PRODUCT a
ON t1.PRODUCT_ID = a_PRODUCT_ID
LEFT JOIN CLIENTS b
ON a.PARTNER_ID = b.PARTNER_ID
WHERE a.CRITERIA = TRUE
) AS t1
JOIN (
SELECT b.NAME AS CLIENT, a.NAME AS SIMPLE_PRODUCT, t1.DATE, t1.PIVOT_PRICE AS SIMPLE_PRICE
FROM TABLE1 t1
LEFT JOIN PRODUCT a
ON t1.PRODUCT_ID = a_PRODUCT_ID
LEFT JOIN CLIENTS b
ON a.PARTNER_ID = b.PARTNER_ID
WHERE a.CRITERIA = FALSE
) AS t2
ON t1.client = t2.client AND t1.date = t2.date
您可能需要选择其他条件并将它们添加到 ON
条件中。否则,这将在具有相同客户和日期的所有产品之间产生一个完整的交叉产品。
您想要的输出有一个额外的 PRODUCT
列,但我看不到它的来源。
关于MySQL - 根据其他表的条件连接表本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228222/