这是我的组连接查询
GROUP_CONCAT(DISTINCT IF(catalog_product_entity_varchar.attribute_id = '134',catalog_product_entity_varchar.value,NULL)) AS 'Subtitle'
该表包含多行,属性 id 为 134。我真的只想拉第一个 catalog_product_entity_varchar.value WHERE catalog_product_entity_int.attribute_id=134
完整SQL如下
SELECT catalog_product_entity.sku AS SKU,
IF(catalog_product_entity_decimal.attribute_id = '67',catalog_product_entity_decimal.value,NULL) AS 'Price',
GROUP_CONCAT(DISTINCT IF(catalog_product_entity_int.attribute_id = '146',catalog_product_entity_int.value,NULL)) AS 'Brand',
GROUP_CONCAT(DISTINCT IF(catalog_product_entity_varchar.attribute_id = '63',catalog_product_entity_varchar.value,NULL)) AS 'Name',
GROUP_CONCAT(DISTINCT IF(catalog_product_entity_varchar.attribute_id = '134',catalog_product_entity_varchar.value,NULL)) AS 'Subtitle'
FROM catalog_product_entity
JOIN catalog_product_entity_decimal ON catalog_product_entity_decimal.entity_id = catalog_product_entity.entity_id
JOIN catalog_product_entity_int ON catalog_product_entity_int.entity_id = catalog_product_entity.entity_id
JOIN catalog_product_entity_varchar ON catalog_product_entity_varchar.entity_id = catalog_product_entity.entity_id
WHERE catalog_product_entity.type_id='simple' AND catalog_product_entity.sku='30020262'
GROUP by catalog_product_entity.entity_id
编辑:试图让事情更清楚。
我正在提取产品数据。为了使事情变得更容易,请尝试忽略大部分查询。我们将只关注“sku”和“副标题”。
第一个表catalog_product_entity。我们正在取消每个产品的 SKU。还有一个唯一的“entity_id”。
当我们想要从另一个名为 catalog_product_entity_varchar 的表中提取该产品的所有相关详细信息时,我们会使用“entity_id”。
属性 id 指的是您想要的特定信息。 134是副标题,63是名字。还有其他“属性”,每个属性都有一个 ID。
我使用 IF 语句允许我将 134 分配给“副标题”,将 63 分配给“名称”。表格看起来像这样。
entity_id attribute_id store_id value
1 134 0 green, large
1 134 1 green, large
1 134 2 green, large
1 63 0 dakine day hiker bag
1 63 1 dakine day hiker bag
1 63 2 dakine day hiker bag
请注意一个产品如何将相同的副标题存储 3 次。这是因为我正在使用的电子商务平台 (Magento) 允许您为您正在运行的每个商店存储不同的副标题(一个 Magento 安装允许多个域共享相同的产品数据库,但有单独的副标题/描述等)
我使用 Group_Concat 来抓取数据,然后使用 DISTINCT 来确保我只抓取一个字幕。然而,我面临的问题是,大多数时候我的字幕和名称在所有商店中都完全相同(因此 Distinct 有效)但是当有不同的字幕时,distinct 将获取多个字幕。
老实说,我对 MYSQL 不是很好,我觉得我可能会以某种方式完全忽略 group_concat,也许使用嵌套的 SQL 语句。请记住,我们并不总是知道产品将使用的商店 ID。
我真的不在乎我抓取哪个字幕,我只想要一个,第一个,最小的,最大的。随便。
最佳答案
你说:
The table contains multiple rows with 146 as the attribute id. Really all I want to do is pull the first catalog_product_entity_int.value WHERE catalog_product_entity_int.attribute_id=146.
你说你想要的是通过以下方式实现的:
SELECT Value
FROM Catalog_Product_Entity_Int
WHERE Attribute_ID = 146;
这可能会返回多个值,因此您必须定义“第一个”的含义;它可以是 MIN、MAX、LIMIT 1 或其他一些标准。
SELECT MIN(Value) AS Value
FROM Catalog_Product_Entity_Int
WHERE Attribute_ID = 146;
SELECT MAX(Value) AS Value
FROM Catalog_Product_Entity_Int
WHERE Attribute_ID = 146;
SELECT Value
FROM Catalog_Product_Entity_Int
WHERE Attribute_ID = 146
LIMIT 1;
对于你所说的,我认为没有理由加入其他三个表或使用 GROUP_CONCAT。
这让我怀疑您没有告诉我们您真正想要的是什么,因为显示的查询对于规定的要求来说是戏剧性的矫枉过正。
关于mysql - 组连接限制 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9162286/