2017-09-14 72 views
1

加入基于标准本身桌子下面就是我试图解决的问题:MySQL的 - 从其他表

表1有产品的ID,日期和这些日期的价格,表2具有商品属性。

我希望能够根据一组属性比较同一日期不同产品的客户端价格。我很容易获得“简单”产品以及“高级”产品的产品/日期/价格清单(见下文)。

我希望能够加入这两个表,使得输出的样子:

[客户端] [产品] [日期] [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?

+0

如果这两个查询是两个不同的表,这些表是用于将一个表与另一个表相关联的字段或字段?用其他标准来形成你想要作为输出的新记录。 – Juan

+0

对于客户,产品和日期的每种组合,您拥有相同的标准值的记录数量是多少?我建议你提供样本数据和期望的结果。 –

+0

你不能在MySQL中使用卷积引号。列名应使用反引号引用。 – Barmar

回答

0

你可以加入两个子查询:

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列,但我看不到它来自哪里。

+0

这工作完美,正是我所期待的 - 非常感谢! – scoloe

+0

如果解决了问题,您应该接受答案 – Barmar