MySQL 在链接字段匹配时选择行

标签 mysql select field

我正在尝试构建一个查询,从中获取内容与搜索相匹配的所有变体。 例如,基于下表,我想获取包含 content = "red"的所有变体

 -------------------------------------------
| ID | Product | Variant | Option | Content |
 -------------------------------------------
|  1 | Shirt   | 1       | size   | S       |   
|  2 | Shirt   | 1       | color  | red     |
|  3 | Shirt   | 2       | size   | M       |   
|  4 | Shirt   | 2       | color  | red     |
|  5 | Shirt   | 3       | size   | L       |   
|  6 | Shirt   | 3       | color  | red     |
|  7 | Shirt   | 4       | size   | M       |
|  8 | Shirt   | 4       | color  | blue    |
 -------------------------------------------

我希望结果是这样的:

 -------------------------------------------
| ID | Product | Variant | Option | Content |
 -------------------------------------------
|  1 | Shirt   | 1       | size   | S       |   
|  2 | Shirt   | 1       | color  | red     |
|  3 | Shirt   | 2       | size   | M       |   
|  4 | Shirt   | 2       | color  | red     |
|  5 | Shirt   | 3       | size   | L       |   
|  6 | Shirt   | 3       | color  | red     |
 -------------------------------------------

当 content = M 时,结果是这样的

 -------------------------------------------
| ID | Product | Variant | Option | Content |
 -------------------------------------------
|  3 | Shirt   | 2       | size   | M       |   
|  4 | Shirt   | 2       | color  | red     |
|  7 | Shirt   | 4       | size   | M       |
|  8 | Shirt   | 4       | color  | blue    |
 -------------------------------------------

我希望这是有道理的。 谢谢!

我做了一个 fiddle http://sqlfiddle.com/#!9/63e64e/2

最佳答案

使用自连接

SELECT v1.*
FROM variant AS v1
JOIN variant AS v2 ON v1.variant = v2.variant
WHERE v2.content = 'red'

这在功能上等同于 Tin Tran 的查询,但不需要编写子查询,因此更简单一些。您需要检查 EXPLAIN 输出以确保它们的处理方式相同。

关于MySQL 在链接字段匹配时选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36853251/

相关文章:

field - 如何从代码中的 moodle 中的自定义配置文件字段中获取值?

mysql - 当我尝试将数据插入表中时,出现错误

php - 使用外键插入数据库

php - HTML 表单/PHP : select with option value = array

mysql - 从具有 2 个条件的表中删除不需要的行

c# - 如何获得一个 System.Collections.Generic.List<FieldInfo> ,它包含类型 T 对象的所有 FieldInfo,直到类层次结构中的对象?

php - 如何使用 Ajax 从 MySQL 获取信息?

java - 如何使用Javafx应用程序更改MySql数据库的特定字段的值?

mysql - 如何使用 MySQL 选择有 2 个具有特定值的连续行?

sql - PostgreSQL - 选择条件满足的不同(列1,列2)