2015-09-09 7 views
0

У меня есть таблица (product), в которой перечислены все продукты. У меня есть другая таблица (product_buddy), которая является отображением зависимостей.SQL для возврата зависимостей продуктов и продуктов

Я установка простого SQLFiddle

В скрипке, есть 3 модели: Foo, Bar, БАЗ. Существует также строка в product_buddy, где baz является зависимостью foo. Так что если я SELECT foo, я хочу, чтобы он также возвращал базу. Но если я SELECT бар, у него нет зависимости, поэтому он должен просто вернуть бар. То же самое с baz, у него нет зависимости, поэтому он должен просто вернуться сам. Только foo должен возвращать две строки в этой скрипке.

Соединение просто присоединяется к нему в одну строку, которая не то, что я хочу, я хочу две строки с полями и полями каждого продукта. Когда я говорю, две строки, если я SELECT Foo, он должен вернуть как Foo строку и БАЗ строку из-за зависимости:

# 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 должна оставаться неизменной.

+0

Можете ли вы разместить свой желаемый результат? – Rahul

+0

Даже когда SqlFiddle рекомендуют описать вопрос, вы должны попытаться предоставить большую часть информации здесь, если потеряна внешняя ссылка. –

+0

Добавил пример ответа, когда я возвращаю продукт foo, мне нужно, чтобы он возвращал строки foo и baz из-за зависимости, определенной в таблице 'product_buddy'. –

ответ

0

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 
0

Попробуйте

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 

Edit:

Видимо MySQL не поддерживает спецификаторе: 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") 
+0

Я пробовал ваш код в скрипке и не работает. :(Я заменяю как «code_searched» для «foo» –

+0

Извините, я не смог попробовать, скрипка просто не работает для меня –

+0

Пожалуйста, попробуйте позже, и оставьте меня если вы заработаете. Ty. –

Смежные вопросы