mysql - 返回产品和产品依赖关系的 SQL

标签 mysql sql join

我有一个表(产品),其中列出了所有产品。我有另一个表 (product_buddy),它是依赖项的映射。

我设置了一个简单的 SQLFiddle

在fiddle中,有3个产品:foo、bar、baz。 product_buddy 中还有一行,其中 baz 是 foo 的依赖项。因此,如果我SELECT foo,我希望它也返回baz。但如果我SELECT bar,它没有依赖性,所以它应该只返回 bar。与 baz 相同,它没有依赖项,因此它应该返回自身。只有 foo 应该在这个 fiddle 中返回两行。

连接只会将其连接到一行中,这不是我想要的,我想要两行包含每个产品的代码和名称字段。当我说两行时,如果我 SELECT foo,由于依赖关系,它应该同时返回 foo 行和 baz 行:

# SQL without missing join/binding of dependency:
SELECT code,name FROM product WHERE product.code = "foo";

| code | name        |
|------|-------------|
| foo  | Foo Product |
| baz  | Baz Product |

如果我这样做,结果是一样的:

SELECT code,name FROM product WHERE product.code IN ("foo", "baz");

但我不提前知道依赖关系。我需要 SQL 来找出依赖关系。我可以编辑 product_buddy 表,product 表需要保持不变。

最佳答案

SQL FIDDLE DEMO

SELECT
    p.*
FROM product p
WHERE p.code = "foo" 

UNION

SELECT
    p.*
FROM product_buddy b           
INNER JOIN product p
   on b.buddy_code = p.code
WHERE b.product_code = "foo" 

结果

id  code    name
1   foo     Foo Product
3   baz     Baz Product

关于mysql - 返回产品和产品依赖关系的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32483306/

相关文章:

mysql - 如何使用单个查询从两个表中获取结果

sql - Oracle 连接查询

sql - 记录在案的 MySQL 连接可能不存在

mysql - 防止 C 中的 SQL 注入(inject)

php - 在 laravel 中创建一个由管理员指定执行日期的计划任务

mysql - SQL 查询根据连接是否存在有条件地从表中选择一行

SQL Server FQDN : Use of IP/Instance unrecognized

php - 使用对象而不是 GET

php - 检查重复键后插入值

MySQL - 选择具有值的列并创建 'virtual column'