我有以下sql(mysql数据库)查询:
SELECT images.alt, images.product_id, images.src
FROM wp_wps_images images
INNER JOIN wp_wps_products products
ON products.product_id = images.product_id
AND products.product_id IN ("2112055640177","2112056590449","2112055378033","2112062292081","2112058490993","2112062619761","2112062488689","2112066420849","2112061833329","2112052527217")
WHERE images.alt LIKE "%Swatch%"
这在返回结果集方面做得很好,结果集如下所示:
Rust (W) - Swatch 2112058490993 foobar.com
Sand - Swatch 2112058490993 barfoo.com
Tan - Swatch 2112056590449 bazfoo.com
Generic Black - Swatch 2112056590449 tazfoo.com
Patterned / Multi - Swatch 2112055640177 mazfoo.com
Tan - Swatch 2112055640177 bazfoo.com
Generic Black - Swatch 2112055640177 tazfoo.com
Generic Black - Swatch 2112055378033 tazfoo.com
Dark Tobacco - Swatch 2112055378033 makazfoo.com
我有 tags
其架构如下所示的表 id (BIGINT)
, tag_id (BIGINT)
, product_id (BIGINT)
, post_id (BIGINT)
, tag (VARCHAR)
. 我想加入这个表格,这样对于所选的图像,我也可以阅读它们各自的内容 tag
名称,但我不知道如何编写正确的联接来实现这一点:
SELECT images.alt, images.product_id, images.src, tags.tag
我希望上面的陈述会有如下的回报:
Rust (W) - Swatch 2112058490993 foobar.com color:rust
Sand - Swatch 2112058490993 barfoo.com material:sand
Tan - Swatch 2112056590449 bazfoo.com color:tan
Generic Black - Swatch 2112056590449 tazfoo.com color:black
Patterned / Multi - Swatch 2112055640177 mazfoo.com material:multi
Tan - Swatch 2112055640177 bazfoo.com color:tan
Generic Black - Swatch 2112055640177 tazfoo.com color:black
Generic Black - Swatch 2112055378033 tazfoo.com color:black
Dark Tobacco - Swatch 2112055378033 makazfoo.com color:dark-tobacco
现在,我有一些类似以下sql语句的内容,但它并没有让我离目标更近:
SELECT images.alt, images.product_id, images.src, tags.tag
FROM wp_wps_images images
INNER JOIN wp_wps_products products
ON products.product_id = images.product_id
AND products.product_id IN ("2112055640177","2112056590449","2112055378033","2112062292081","2112058490993","2112062619761","2112062488689","2112066420849","2112061833329","2112052527217")
INNER JOIN wp_wps_tags tags
ON tags.product_id = products.product_id
AND tags.product_id = images.product_id
AND tags.tag LIKE "%:%"
WHERE images.alt LIKE "%Swatch%"
上面的语句得到的结果有很多重复,与我将图像与其标记名匹配的目标相去甚远。结果是:
Tan - Swatch 2112052527217 bazfoo.com color:generic-black
Tan - Swatch 2112052527217 bazfoo.com depth:8
Tan - Swatch 2112052527217 bazfoo.com height:13
Tan - Swatch 2112052527217 bazfoo.com material:leather
Tan - Swatch 2112052527217 bazfoo.com strap:12-1-2
Tan - Swatch 2112052527217 bazfoo.com style:totes
Tan - Swatch 2112052527217 bazfoo.com width:19
Generic Black - Swatch 2112052527217 tazfoo.com color:generic-black
Generic Black - Swatch 2112052527217 tazfoo.com depth:8
如何为mysql数据库编写sql语句,返回带有各自标记名的图像?
编辑1:
@戴相龙在下面发表了有效的评论。
您的示例数据输出没有显示当单个产品有多个标记时您希望如何获取数据
对于具有多个标记的单个产品,我只需要与行的字符串匹配的标记 images.alt
数据。alt数据遵循以下模式: [color || material] - Swatch
. 标记数据遵循以下字符串模式: [type]:[value]
.
字符串比较应与 [color || material]
部分 image.alt
数据和右边的结肠 [value]
一边,一边 tags.tag
数据。
1条答案
按热度按时间cbjzeqam1#
你在正确的轨道上-两个内部连接。
问:这个查询会发生什么:
换句话说:
1) 那么,就只能在互密钥上加入
2) 根据总体标准筛选
对于表中的数据集:
问:你还收到“重复行”吗?
问:是否有任何预期的行“丢失”?
问:如果一个产品有多行,会发生什么?
请尝试此查询并用结果更新您的帖子。
另外:请在此处查看更多建议:
sql内部连接有3个表?
sql内部联接—从两个或多个表中查询数据
我做了一个额外的改变:我正在全面使用“images.product\u id”。
它应该返回“alt”文本、产品id、图像源和每个正在使用的图像的标签
LIKE "%Swatch%"
以及IN ("2112055640177","2112056590449","2112055378033","2112062292081","2112058490993","2112062619761","2112062488689","2112066420849","2112061833329","2112052527217")
.如果你有多行。。。这意味着你有重复的图像。
如果标签为空,则表示该产品id没有标签。
如果没有看到预期的标记,则表示没有与“where”子句匹配的图像。
您可以通过复制/粘贴一个简单的“选择”来验证3、4或5中的任何一个。
希望有帮助。。。
问:为什么需要加入产品表?什么(如果有的话)是你的“产品”所独有的?