【问题标题】:Join table values If record exist MySQL连接表值 如果记录存在 MySQL
【发布时间】:2018-11-09 10:31:10
【问题描述】:

只有当changes 表中的记录存在时,我才需要我的products 表中的连接值,在其他方式上只能从products 表中获取返回值,我尝试使用 LEFT JOIN 但做错了。表changesproducts 也具有相同的结构

    SELECT
    product.*, 
    parent.name, 
    parent.ignored, 
    child.name, 
    child.ignored, 
    changes.* 

    FROM
    products AS product 
    inner join parent_cat AS parent on product.parent_id = parent.ID 
    inner join child_cat AS child on product.category_id = child.ID 
    left join changes AS changes on changes.product_id = product.SKURcrd
    WHERE
       product.slug = 'some slug'

返回的数据如下:

{#389 ▼
  +"parent_id": 3
  +"category_id": 142
  +"product_id": null
  +"slug": "some slug"
  +"SKURcrd": "301832"
  +"product_name": null
  +"product_name_revert": "1911 AIR"
}

表格结构看起来像(示意图):

-------------------------        ----------------------------
SKURcrd  |  product_name         product_id  |  product_name
-------------------------        ----------------------------

【问题讨论】:

  • 样本数据、所需结果以及对您的逻辑的解释会有所帮助。
  • 您的左连接本质上没有任何问题,但我怀疑在简化您的查询时您可能已经解决了问题。检查您的 WHERE 子句谓词以获取对 changes 的引用或发布完整的查询。
  • 如果changes 中存在某些记录,您还想要changes 中不存在的记录吗?在这种情况下,您使用左连接,不存在的记录将只是 null

标签: mysql sql database laravel


【解决方案1】:

有两种方法可以做到这一点,要么使用 INNER JOIN 进行更改,要么使用 where 子句(如 where 更改)。 product_id 不为空...如下所示:

SELECT
product.*, 
parent.name, 
parent.ignored, 
child.name, 
child.ignored, 
changes.* 

FROM
products AS product 
inner join parent_cat AS parent on product.parent_id = parent.ID 
inner join child_cat AS child on product.category_id = child.ID 
left join changes AS changes on changes.product_id = product.SKURcrd
WHERE
   product.slug = 'some slug' and changes.product_id is not null

【讨论】:

  • 当没有找到changes.product_id时请求返回NULL,如果没有找到product_id,我正在尝试只从产品表中获取数据
  • 好吧,当你说“我只需要在更改表中存在记录时,我才需要从我的产品表中连接值”时,我想我很困惑,我认为你只想在他们找到 product_id 时查看它们。 /跨度>
  • 示例 products.product_name = 'Some name',changes.product_name = NULL,因为更改表是空的,当我使用左连接时,我得到 product_name = NULL,但需要 product_name = 'Some Name'。或 products.product_name = "Some Name",但 changes.product_name = "Some Name Changes",因为更改表不为空且 product_id = SKURcrd,在这种情况下我需要获取 product_name = "Some Name Changes"。有意义吗?
猜你喜欢
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多