首页 > 解决方案 > 在 Laravel 中使用不同的查询左连接

问题描述

我有 2 个这样的表:

产品大师:

在此处输入图像描述

活动产品:

在此处输入图像描述

我使用此查询从 product_master 和 campaign_product 表中获取数据:

$oSelect = $this->select(
    "{$this->table}.product_code",
    "{$this->table}.product_display_name",
    'dmspro_mys_campaign_product.campaign_code',
    'dmspro_mys_campaign_product.product_id',
)->leftJoin(
    'dmspro_mys_campaign_product', 
    \DB::raw("SELECT DISTINCT product_id FROM dmspro_mys_campaign_product"), '=', "{$this->table}.product_id"
);

return $oSelect->get();

但正如您所见,在我的campaign_product 表中,有2 行相同的product_id,所以我的结果是重复行:

在此处输入图像描述

现在我希望它通过不同的查询仅返回 1 个 product_id。我试过这个:

 ->leftJoin(\DB::raw("(SELECT DISTINCT product_id FROM dmspro_mys_campaign_product) as cp"), 'cp.product_id', '=', "{$this->table}.product_id");

但这是关于我的查询语法的错误。

我怎么能做到这一点?

标签: mysqllaravel

解决方案


如果您使用的是 MySQL,请在运行主查询之前运行以下查询。

SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY', ''));

推荐阅读