Как найти поля, которые есть в обеих таблицах и являются общими для них?

Как найти общие поля для выполнения операции JOIN между таблицами A и B, где каждая из таблиц содержит N полей, и как найти поля, в которых содержатся одинаковые данные?
  • 9 февраля 2024 г. 5:48
Ответы на вопрос 3
Для определения общих полей между двумя таблицами A и B в базе данных можно воспользоваться запросом к системным таблицам или представлениям базы данных, которые хранят метаинформацию о схеме. Подход будет различаться в зависимости от конкретной системы управления базами данных (СУБД), например, PostgreSQL, MySQL, SQL Server и т.д.

Пример запроса для PostgreSQL:

```sql
SELECT a.column_name
FROM information_schema.columns a
JOIN information_schema.columns b ON a.column_name = b.column_name
WHERE a.table_name = 'A'
  AND b.table_name = 'B'
  AND a.table_schema = 'public' -- Указываем схему, если нужно
  AND b.table_schema = 'public';
```

Для MySQL запрос будет аналогичным:

```sql
SELECT a.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS a
JOIN INFORMATION_SCHEMA.COLUMNS b ON a.COLUMN_NAME = b.COLUMN_NAME
WHERE a.TABLE_NAME = 'A'
  AND b.TABLE_NAME = 'B'
  AND a.TABLE_SCHEMA = 'your_db_name' -- Указываем имя базы данных
  AND b.TABLE_SCHEMA = 'your_db_name';
```

Если нужно найти не только одинаковые по названию поля, но и поля, содержащие одинаковые данные, можно сформировать запрос с использованием операторов `JOIN` и `WHERE`. Чтобы убедиться, что данные в полях совпадают, вы можете выполнить INNER JOIN на эти поля:

```sql
SELECT a.*
FROM A a
INNER JOIN B b ON a.common_field = b.common_field
-- Список JOIN для других общих полей:
-- AND a.another_common_field = b.another_common_field
-- и т.д.
```
Этот запрос возвратит строки из таблицы A, которые имеют соответствующие записи в таблице B с одинаковыми значениями в общих полях.

Если же вы хотите получить список пар значений, которые одинаковы в обоих таблицах по определенным полям, запрос будет выглядеть примерно так:

```sql
SELECT a.common_field, a.another_common_field
FROM A a
JOIN B b ON a.common_field = b.common_field
  AND a.another_common_field = b.another_common_field
-- и так для каждого совпадающего поля
```

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

Помните, что точные названия системных таблиц и специфика синтаксиса могут отличаться в зависимости от конкретной СУБД.
Если задача на знание справочника SQL, то есть такая конструкция: 
таблица1 join таблица2 using (общие_имена_полей)
это эквивалент:

Вариант с using будет работать, если выдерживается культура именования, при которой в названии поля есть название таблицы.
Никак. 
Есть программы и сервисы, которые импортируют таблицы и их связи (если нет их нет, то без них) из баз данных в диаграмму. Но оная строится не на основе данных, а на предметной области.
Похожие вопросы