我有 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