首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于返回产品和产品依赖项的SQL

用于返回产品和产品依赖项的SQL
EN

Stack Overflow用户
提问于 2015-09-09 23:11:32
回答 2查看 52关注 0票数 0

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

我设置了一个简单的SQLFiddle

在小提琴中,有3种产品: foo,bar,baz。在product_buddy中还有一行,其中baz是foo的依赖项。所以如果我SELECT foo,我希望它也返回baz。但是如果我SELECT bar,它没有依赖关系,所以它应该只返回bar。与baz一样,它没有依赖项,所以它应该只返回自己。在这个小提琴中,只有foo应该返回两行。

一个join将简单地将它连接成一行,这不是我想要的,我希望每个产品的代码和名称字段有两行。当我说两行时,如果我SELECT foo,由于依赖关系,它应该同时返回foo行和baz行:

代码语言:javascript
复制
# SQL without missing join/binding of dependency:
SELECT code,name FROM product WHERE product.code = "foo";

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

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

代码语言:javascript
复制
SELECT code,name FROM product WHERE product.code IN ("foo", "baz");

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

EN

回答 2

Stack Overflow用户

发布于 2015-09-09 23:34:53

代码语言:javascript
复制
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" 

结果

代码语言:javascript
复制
id  code    name
1   foo     Foo Product
3   baz     Baz Product
票数 0
EN

Stack Overflow用户

发布于 2015-09-09 23:35:25

尝尝这个

代码语言:javascript
复制
WITH dep (dependencies) AS 
    (SELECT buddy_code 
     FROM product_buddy
     WHERE product_code = code_searched)
SELECT code, name
FROM product
WHERE code in dep.dependencies OR code = code_searched

编辑:

显然MySQL不支持WITH子句:S

代码语言:javascript
复制
select code, name
from product
where product.code = "foo" 
    OR product.code IN (SELECT buddy_code 
                        FROM product_buddy
                        WHERE product_buddy.product_code = "foo")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32483306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档