SQL, исключающий все возможности, содержащиеся в списках, при выполнении назначений

#sql #postgresql

Вопрос:

Скажи, что у меня есть этот стол:

 col1   col2    col3
1      Amy    [Jessica, Laura, Joe]
1     Jessica [Jessica, Laura, Joe]
2     Steve   [Amy, Mike]
2      Amy    [Amy, Mike]
 

Для каждого числа в col1 я хочу выбрать человека в col2 (например, для 1 я хочу выбрать Эми или Джессику). Однако ни один из людей в соответствующем списке в col3 не должен быть выбран (Джессика). Как я могу написать запрос, который приведет к следующей таблице? Я никогда раньше не работал со списками в SQL.

 id  person
1    Amy
2    Steve
 

Комментарии:

1. Что такое тип данных col3 ?

Ответ №1:

Предположительно, «список» в col3 представляет собой массив. Если это так:

 select t.*
from t
where col2 <> all (col3);
 

Вот скрипка db<>.

Комментарии:

1. Спасибо! Как я могу проверить тип данных col3?

2. @Hanna . . . Вы можете посмотреть определение таблицы.

3. Есть ли SQL-запрос, который я должен написать, чтобы получить определение таблицы? Я не знаю, как это сделать.

4. @Ханна . . . Вы можете использовать INFORMATION_SCHEMA.COLUMNS представление.