我有一个表(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行:
# 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表需要保持不变。
发布于 2015-09-09 23:34:53
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发布于 2015-09-09 23:35:25
尝尝这个
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
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")https://stackoverflow.com/questions/32483306
复制相似问题