gpt4 book ai didi

MySQL - 基于现有关系的两个关系返回一个值

转载 作者:行者123 更新时间:2023-11-30 21:38:11 25 4
gpt4 key购买 nike

我有一家商店,它有独特的产品,具有独特的属性。所以有三个表:商店、产品和属性。最近系统中有一个错误,导致某些商店中的某些产品具有两个不同的“名称”属性。一个是简单的“名称”,另一个是“标签”。

我需要一个查询来返回具有两个不同名称的产品的商店 ID。

SELECT 
stores.id
FROM
stores
INNER JOIN
products ON products.store_id = stores.id
INNER JOIN
properties ON properties.product_id = products.id
WHERE
properties.name IN ('Name' , 'Label')
GROUP BY
products.id
HAVING
COUNT(DISTINCT properties.name) = 2;

这就是我目前所拥有的。我试图避免子查询,因为产品和属性是非常大的表,我被困在了这一点上。我无法从逻辑上弄清楚为什么此查询返回的商店不具有名称和标签属性。我仔细检查了一下,没有一个产品有两个“名称”或“标签”属性,每个只有一个。这样就不会导致误报。

编辑:

架构

Table: Stores
Columns:
id int(11) AI PK
domain_id int(11)
name varchar(255)
description varchar(255)
address varchar(255)
details longtext

Table: products
Columns:
id int(11) AI PK
store_id int(11)
price varchar(255)

Table: properties
Columns:
id int(11) AI PK
product_id int(11)
name varchar(255)
value varchar(255)
position int(11)

数据

Store Data Structure
{ id: 2341, domain_id: 4, name: "East LA", description: nil, address: nil, details: nil }

Products Data Structure
{ id: 6482773, store_id: 2341, price: "5.00" }

Property Data Sturcture
{ id: 9132472, product_id: 6482773, name: "Name", value: "Paper Plates", position: 1 }

{ id: 9132472, product_id: 6482773, name: "Label", value: "Paper Plates", position: 2 }

仅返回商店 ID。在这种情况下,它将返回 2341,因为它同时具有标签和名称属性。

最佳答案

首先,您不需要加入表 stores,因为您已经在 products 表上有 store_id,并且您不需要' 需要商店的任何附加信息(如名称或描述)。了解这一点,我将继续下一个查询:

SELECT 
DISTINCT p1.store_id
FROM
products AS p1
INNER JOIN
properties AS p2 ON p2.product_id = p1.id AND p2.name IN ('Name' , 'Label')
GROUP BY
p1.id, p1.store_id
HAVING
COUNT(p2.name) >= 2;

引用示例:db-fiddle

关于MySQL - 基于现有关系的两个关系返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52958259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com