Выбор союза:
select * from table1
union
select * from table1_backup
Какой запрос выбрать перекресток?
Вы используете SQL Server 2005 или другую СУБД?
Попытка быть совместимой с кросс-db. Основное внимание уделяется MySQL и SQLServer.


В SQL Server пересекаться
select * from table1 intersect select * from table1_backup
Блин, это просто ответ SQL Server, нет ли кросс-db запроса SQL Server / MySQL?
Согласно сообщениям в блогах и спискам рассылки 2005 года, которые я обнаружил в Google, MySQL не поддерживает прямую нотацию пересечения, а вместо этого предлагает внутренние соединения или подзапросы.
В вопросе не говорится, что требуется решение MySQL. Имейте в виду, что интерес также является неявным DISTINCT (таким же, как UNION и MINUS).
внутреннее соединение я думаю: предположим, что T1 и T2 имеют одинаковую структуру:
выберите T1. * из Внутреннее соединение T1 T2 на T1.pkField = T2.pkField
Объединение полезно, потому что не добавляет дополнительных полей. При использовании он обрабатывает две таблицы как одну и ту же таблицу. Я хочу того же, за исключением того, что хочу видеть, какие записи точно такие же, на случай, если что-то пошло не так при запуске резервного копирования.
«Пересечение» также является частью стандартного SQL.
Внутреннее соединение дает другой ответ.
Итак, какой будет запрос? select * from table1 пересекается select * from table2 дает мне ошибку в mysql
select distinct * from (select * from table1 union select * from table1_backup)
Отлично, это тот запрос, который я искал, stackoverflow потрясающий, занял всего 5 минут и был намного интереснее, чем Google. Этот ответ идеально подходит для меня во всех смыслах, за исключением того, что в конце нужно указать "as table_x", чтобы не было нарушения ключа в моей версии SQL.
Это не возвращает пересечение ... оно возвращает каждую строку в каждой из таблиц и отфильтровывает дубликаты.
SELECT *
FROM table1
WHERE EXISTS
(SELECT *
FROM table1_backup
WHERE table1.pk = table1_backup.pk)
работает
Это похоже на хороший ответ, но не такой абстрактный, как тот, который я принял. Наверное, тоже быстрее.
Для моих целей предложение where мне не понадобилось.
Вам нужно предложение WHERE, иначе это не имеет смысла. Вы просто вернете все строки из table1, если какие-либо строки существуют в table1_backup. В противном случае вы получите ноль строк.
По поводу подобных вопросов я обычно возвращаюсь к этому визуальному ресурсу:
вот решение для 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}) с идентификатором атрибута, который является номером набора, и fk_ id, который ссылается на ПЕРВИЧНЫЙ КЛЮЧ таблицы элементов, надмножество (имеется в виду возможные значения для чисел в фигурных скобках). Для тех, кто не склонен к математике, давайте представим, что у вас есть таблица other_ table, которая представляет собой список элементов, и еще одна таблица, another_ table, которая представляет собой список номеров транзакций, и обе таблицы образуют таблицу от многих до -многие отношения, таким образом создавая «table1». теперь давайте представим, что вы хотите знать идентификаторы в «другой_таблице», в которой были элементы 1, 2 и 3. Это и есть запрос для этого.
подзапросы ?! В самом деле?
чтобы получить пересечение table1 и table2:
SELECT * FROM table1, table2 WHERE table1.pk=table2.pk;
Это не пересечение, это просто соединение. Союзы работают с двумя идентичными наборами данных, искал похожую функцию. Но вы правы, вы можете присоединиться к каждому из них. -1 - это просто напрасное использование имени Господа.
Пересечение двух одинаковых таблиц a и b может быть выполнено следующим образом:
SELECT a.id, a.name
FROM a INNER JOIN b
USING (id, name)
Пересечение по каждому полю или только по ключу?