SQL ГДЕ ищите 2 данных в одном столбце - PullRequest
0 голосов
/ 26 января 2020

Я получил 2 таблицы

Элемент:

name
id
other

часть:

name_part
id
other

I wi sh чтобы сделать запрос, чтобы найти, какой элемент связан с name_part = 'a' И name_part = 'b'

2 разных части в одном элементе

Запрос:

SELECT item.name
FROM item
INNER JOIN table1 ON item.id = part.id
WHERE part.name_part = 'a' AND part.name_part = 'b'

Вывод us '0'

Возможно с вложенным WHERE?

Я пробовал, но не могу найти, как заставить это работать.

PS: я уже задавал подобный вопрос, но он был очень неточным.

Ответы [ 2 ]

1 голос
/ 26 января 2020

Вы можете сделать это с помощью EXISTS:

SELECT i.name
FROM item i
WHERE
  EXISTS (SELECT 1 FROM part p WHERE p.id = i.id and p.name_part = 'a')
  AND
  EXISTS (SELECT 1 FROM part p WHERE p.id = i.id and p.name_part = 'b')

или объединить таблицы, сгруппировать их по элементам и установить условие в предложении has:

SELECT i.name
FROM item i INNER JOIN part p 
ON i.id = p.id
WHERE p.name_part IN ('a', 'b')
GROUP BY i.name
HAVING COUNT(DISTINCT p.name_part) = 2

Хотя я использовал столбец имена из ваших примеров данных, я считаю, что столбец id в таблице part должен быть переименован в нечто вроде item_id, поскольку он ссылается на id из item.

0 голосов
/ 26 января 2020

Решения Forpas очень разумны. Этот ответ, однако, расширяет ваши попытки.

Вы можете делать то, что вы хотите с join s, но вам нужно два из них:

SELECT i.name
FROM item i JOIN
     part pa
     ON pa.id = i.id  AND
        pa.name_part = 'a' JOIN
     part pb
     ON pb.id = i.id AND
        pb.name_part = 'b';

Ваша версия не может работать, потому что name_part не может быть одновременно 'a' и 'b' в одной строке.

...