Py学习  »  DATABASE

使用join mysql时字段列表中的未知列

Tomato • 5 年前 • 1703 次点击  

我有两张这样的桌子:

产品大师:

|product_code|product_name|product_id|
|    code 1  |    P1      |  SP1     |
|    code 2  |    P2      |  SP2     |

活动产品:

|campaign_id |campaign_code|product_code|product_id|
|    1       |    C1       |  code 1    |   SP1    |
|    2       |    C2       |  code 1    |   SP1    |
|    3       |    C3       |  code 2    |   SP2    |

此表链接到外键产品ID

我想用活动代码列获取所有产品数据。我不想获取具有相同产品ID的两个活动产品行。因此,我使用以下查询:

SELECT dmspro_mys_product_master.*, dmspro_mys_campaign_product.campaign_code
FROM dmspro_mys_product_master
INNER JOIN (SELECT DISTINCT dmspro_mys_campaign_product.product_id FROM dmspro_mys_campaign_product) AS cp
ON cp.product_id = dmspro_mys_product_master.product_id

运行时出错:

查询错误(1054):“字段列表”中的未知列“dmspro_mys_campaign_product.campaign_code”

我该怎么解决?

谢谢您!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46288
 
1703 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Barmar
Reply   •   1 楼
Barmar    5 年前

子查询没有返回 campaign_code 列。此外,还需要使用子查询的别名。

SELECT pm.*, cp.campaign_code
FROM dmspro_mys_product_master AS pm
INNER JOIN (
    SELECT DISTINCT product_id, campaign_code
    FROM dmspro_mys_campaign_product) AS cp
ON cp.product_id = pm.product_id
GMB
Reply   •   2 楼
GMB    5 年前

campaign_code 不由子查询返回。另外,表别名 dmspro_mys_campaign_product 在外部查询中不可用,仅在子查询中可用。

您应该修改子查询,使其返回:

SELECT m.*, cp.campaign_code
FROM dmspro_mys_product_master m
INNER JOIN (
    SELECT DISTINCT product_id, campaign_code
    FROM dmspro_mys_campaign_product
) AS cp
ON cp.product_id = m.product_id

我还修正了对两个表使用表别名的查询:这缩短了查询并使其更可读。