使用加入 MySQL 时字段列表中的未知列



我有 2 个这样的表:

product_master:

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

campaign_product:

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

此表链接到外键product_id

我想通过campaign_code列获取所有商品数据。我不想在相同的product_id下获得 2 campaign_product行。所以我使用这个查询:

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">

我该如何解决这个问题?

谢谢!

>子查询不返回列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

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

子查询不返回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

最新更新