Как извлечь записи с помощью «общих» внешних ключей из одной таблицы - PullRequest
0 голосов
/ 24 апреля 2019

Допустим, у меня есть таблица с именем Color_Size_Rel, которая выглядит следующим образом

 Color_Size_ID           Color                Size
        1                Blue                  L 
        2                Blue                  M
        3                Green                 L
        4                Purple                L
        5                Pink                  XL
        6                White                 S
        7                Blue                  L

Каким будет запрос для получения цветов / количества цветов с одинаковым размером?Ожидаемый набор результатов ниже:

Blue
Green
Purple

Я пробовал следующее безрезультатно (я действительно застрял и не знаю, как это будет сделано):

     select color
       from color_size_rel
      where size = size;

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Вы можете попытаться использовать подзапрос exists, чтобы сделать это.

Запрос 1 :

SELECT DISTINCT t1.color
FROM Color_Size_Rel t1
WHERE exists (
    SELECT 1
    FROM Color_Size_Rel tt
    WHERE t1.Size = tt.Size
    HAVING COUNT(*) > 1
)

Результаты :

|  color |
|--------|
|   Blue |
|  Green |
| Purple |
1 голос
/ 24 апреля 2019

Это должно сработать:

WITH color_size_rel AS (SELECT 1 color_size_id, 'Blue' color, 'L' "SIZE" FROM dual UNION ALL
                        SELECT 2 color_size_id, 'Blue' color, 'M' "SIZE" FROM dual UNION ALL
                        SELECT 3 color_size_id, 'Green' color, 'L' "SIZE" FROM dual UNION ALL
                        SELECT 4 color_size_id, 'Purple' color, 'L' "SIZE" FROM dual UNION ALL
                        SELECT 5 color_size_id, 'Pink' color, 'XL' "SIZE" FROM dual UNION ALL
                        SELECT 6 color_size_id, 'White' color, 'S' "SIZE" FROM dual UNION ALL
                        SELECT 6 color_size_id, 'Orange' color, 'S' "SIZE" FROM dual UNION ALL
                        SELECT 7 color_size_id, 'Blue' color, 'L' "SIZE" FROM dual)
SELECT "SIZE", color
FROM   (SELECT DISTINCT "SIZE",
                        color,
                        COUNT(DISTINCT color) OVER (PARTITION BY "SIZE") cnt
        FROM   color_size_rel)
WHERE  cnt > 1
ORDER BY "SIZE", color;

SIZE COLOR
---- ------
L    Blue
L    Green
L    Purple
S    Orange
S    White

(я добавил дополнительный цвет в размере "S", чтобы продемонстрировать вывод, когда есть несколько размеров с более чем одним цветом.)

Это находит количество различных цветов на размер, а затем различает результирующий набор, так что, если в каждом размере есть дублирующие цвета, сообщается только один.Наконец, мы фильтруем результаты, чтобы показать те размеры, число которых больше 1.

NB. Пожалуйста, не используйте size в качестве имени столбца - это зарезервированное слово, поэтому я должен былиспользуйте двойные кавычки каждый раз, когда я на него ссылаюсь.

0 голосов
/ 24 апреля 2019

Выберите отдельный цвет из colour_size_rel, где размер = размер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...