【问题标题】:Unknown column in field list when use join MySQL使用 join MySQL 时字段列表中的未知列
【发布时间】:2019-10-03 23:37:50
【问题描述】:

我有 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 列获取所有产品数据。我不想获得 2 个具有相同 product_id 的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”

我该如何解决这个问题?

谢谢!

【问题讨论】:

  • 您的外部查询中没有名为 dmspro_mys_campaign_product 的表。

标签: mysql sql database join


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      相关资源
      最近更新 更多