ВЫБРАТЬ из двух таблиц, СОЕДИНИТЬСЯ без связи, повторяя значение в одном или другом столбце

У меня есть два оператора SELECT, которые получают правильные данные из двух разных таблиц.

-- 1: 
SELECT employee_id FROM employees
WHERE city = 'London';

-- returns employee_id = 5, 6, 7, 9
-- 2:
SELECT category_id FROM categories
WHERE category_name ILIKE 'dairy%';

-- returns category_id = 4 

У меня есть таблица employees_categories, которую я хотел бы заполнить следующим образом на основе приведенных выше критериев:

    | employee_id | category_id |
    | ----------- | ----------- | 
    |           5 |           4 |
    |           6 |           4 |
    |           7 |           4 |
    |           9 |           4 | 

я мог бы использовать

INSERT INTO employees_categories (
    employee_id, category_id
) VALUES (5,4), (6,4), (7,4), (9,4);

Но я надеялся создать CTE на основе двух операторов SELECT вверху, чтобы можно было использовать его для INSERT INTO (автоматизировать весь процесс в одном запросе).

У меня возникли проблемы с выяснением того, как соединить результаты из двух SELECT, поскольку employee_id или category_id потенциально повторяются (как показано), и между двумя таблицами, из которых они выбраны, нет общей связи.

Любая помощь очень ценится!

Можете ли вы быть уверены, что запрос категории вернет только одну строку? Поскольку между двумя таблицами нет связи, вы также можете сделать вставку из select и жесткого кода 4 в качестве идентификатора категории.

Schwern 08.04.2024 03:10

Не могли бы вы составить временную таблицу названий городов и категорий?

Schwern 08.04.2024 03:11

Определенно думал о жестком кодировании этого результата, но он не будет масштабироваться или точно реагировать на будущие запросы. Re: Таблица Temp, я уже надеялся сделать CTE с этой информацией, а затем INSERT использовать ее... может быть, две CTE?

Avery Freeman 08.04.2024 06:20

Как узнать, какие сотрудники и категории сочетаются друг с другом? Расширение вашего примера может помочь.

Schwern 09.04.2024 08:51

Я мог бы показать результаты более подробного запроса SELECT для контекста, но проблема позволяет получать только идентификационные номера, поэтому он будет носить исключительно описательный характер. Тем не менее, точка зрения принята, спасибо

Avery Freeman 11.04.2024 01:23
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не существует правила, согласно которому предложение ON в JOIN должно использовать обе таблицы... но будьте осторожны, если вы этого не сделаете, иначе вы можете быть удивлены тем, что вы получите.

SELECT employee_id, category_id
FROM employees
JOIN categories ON category_name ILIKE 'dairy%'
WHERE city = 'London';

Ух ты, я так впечатлена, я не знала, что ты можешь это сделать! Мне даже не пришлось уточнять синтаксис, чтобы получить именно те результаты, которые мне были нужны — как часто это происходит? Замечательный!

Avery Freeman 08.04.2024 06:25

Вместо этого я бы использовал CROSS JOIN и поместил условие ILIKE в предложение WHERE (поскольку это не условие соединения).

jarlh 08.04.2024 11:22

@jarlh, можешь подробнее объяснить, что ты имеешь в виду? Возможно, создать другой ответ?

Avery Freeman 11.04.2024 01:25

@AveryFreeman, employees CROSS JOIN categories WHERE category_name ILIKE 'dairy%' AND city = 'London', результат тот же, скорее дело вкуса.

jarlh 11.04.2024 09:34

Другие вопросы по теме