【问题标题】:SQL LEFT JOIN using WHERE condition使用 WHERE 条件的 SQL LEFT JOIN
【发布时间】:2021-02-10 13:08:16
【问题描述】:

我有这样的表:

categorizables

我还有表 productscategories 没有任何外键。

我尝试创建这样的查询来计算每个类别的产品:

SELECT category_id, COUNT(categorizable_id), categories.title 
FROM categorizables 
LEFT JOIN categories ON categories.id = category_id
GROUP BY category_id

它有效,但是当我尝试添加 WHERE 条件时,它不起作用:

SELECT category_id, COUNT(categorizable_id), categories.title 
FROM categorizables 
LEFT JOIN categories ON categories.id = category_id
WHERE categorizables.categorizable_type = "App\Models\Product"
GROUP BY category_id

如何正确添加WHERE 条件?

【问题讨论】:

  • 我只是迷路了。您有一个表categorizable,它同时具有idcategorizable_id。那是什么样的命名约定?任何地方都有product_id 吗?表是如何连接的?
  • @GordonLinoff 那是一种变形关系......它使用 _type 作为模型,使用 _id 作为 id
  • 定义“不起作用”。别名所有表,完全限定您的选择列表并完全指定您的组(并打开您的 MySQL ONLY_FULL_GROUP_BY 模式)
  • 可以添加你的select语句的代码吗?
  • 这种来自 Laravel 框架的命名约定 morphMany 表结构 :) @GordonLinoff

标签: mysql sql laravel eloquent


【解决方案1】:

使用撇号代替引号并转义反斜杠:

SELECT category_id, COUNT(categorizable_id), categories.title 
FROM categorizables 
LEFT JOIN categories ON categories.id = category_id
WHERE categorizables.categorizable_type = 'App\\Models\\Product'
GROUP BY category_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多