我有一个表(产品
),其中列出了所有产品。我有另一个表 (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
表需要保持不变。
最佳答案
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/