Что такое стандартный SQL-запрос для получения пересечения таблиц? - PullRequest
6 голосов
/ 29 сентября 2008

Выбор объединения:

select * from table1 
union 
select * from table1_backup 

Какой запрос выбрать пересечение?

Ответы [ 9 ]

9 голосов
/ 29 сентября 2008

В SQL Server пересекаются

select * from table1 
intersect
select * from table1_backup
6 голосов
/ 29 сентября 2008
SELECT *
FROM table1
WHERE EXISTS
(SELECT *
FROM table1_backup
WHERE table1.pk = table1_backup.pk)

работает

2 голосов
/ 30 сентября 2008

Для подобных вопросов я склонен вернуться к этому визуальному ресурсу:

Визуальное объяснение соединений SQL

1 голос
/ 07 августа 2009

вот решение для MySQL:

CREATE TABLE table1(
id INT(10),
fk_id INT(10),
PRIMARY KEY (id, fk_id),
FOREIGN KEY table1(id) REFERENCES another_table(id),
FOREIGN KEY table1(fk_id) REFERENCES other_table(id)
);

SELECT table1.* FROM table1 as t0
INNER JOIN table1 as a ON (t0.id = a.id and fk_id=1)
INNER JOIN table1 as b ON (t0.id = b.id and fk_id=2)
INNER JOIN table1 as c ON (t0.id = c.id and fk_id=3)
ORDER BY table1.id;

По сути, у вас есть таблица математических подмножеств (т. Е. 1 = {1, 2, 3}, 2 = {3, 4, 2}, ..., n = {1, 4, 7}) с атрибут id, который является номером набора, и fk_ id, который ссылается на PRIMARY KEY таблицы элементов, надмножество (означающее возможные значения для чисел в фигурных скобках). Для тех, кто не склонен математически, представим, что у вас есть таблица 'other_ table', которая представляет собой список элементов, и другая таблица 'another_ table', которая представляет собой список номеров транзакций, и обе таблицы образуют многозначную таблицу. -много отношения, таким образом производя 'table1'. Теперь давайте представим, что вы хотите знать идентификаторы в 'another_ table', в которой есть пункты 1, 2 и 3. Это запрос для этого.

1 голос
/ 29 сентября 2008

«Пересечение» также является частью стандартного SQL.

Внутреннее объединение дает другой ответ.

1 голос
/ 29 сентября 2008

внутреннее соединение, я думаю: предположим, что T1 и T2 имеют одинаковую структуру:

выберите T1. * Из Внутреннее соединение T1 T2 на T1.pkField = T2.pkField

0 голосов
/ 15 августа 2010

Пересечение двух идентичных таблиц a и b может быть выполнено следующим образом:

SELECT a.id, a.name
FROM a INNER JOIN b
USING (id, name)
0 голосов
/ 29 декабря 2009

подзапросов ?! на самом деле?

, чтобы получить пересечение таблиц1 и таблиц2:

SELECT * FROM table1, table2 WHERE table1.pk=table2.pk;
0 голосов
/ 29 сентября 2008
select distinct * from (select * from table1 union select * from table1_backup) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...