2016-07-13 6 views
0

У меня есть две разные базы данных. В обоих есть таблица, называемая фруктами. Теперь я хочу обновить вторую базу данных по отношению к первой базе данных. Для этого я сравниваю каждую строку по всем значениям столбцов (кроме столбца ID) в первой базе данных с каждой строкой во второй базе данных и получаю те строки, в которых есть разница. запрос я использую этоСравнение строк из 2 таблиц в 2 разных базах данных

SELECT A.* FROM db1.Fruit A 
      Left Outer Join Fruit B ON 
      (A.Ratings = B.Ratings AND A.Name = B.Name AND A.Color = B.Color) 
where B.Ratings IS NULL OR B.Name IS NULL OR B.Color IS NULL 

Table in the first databaseTable in the second database.

Теперь в результате он должен показать строку с идентификатором 3, где имя Kiwi, а цвет зеленый. Но он также показывает строку с ID 4 с именем Banana, поскольку другие столбцы имеют значение null, и в моем запросе я пишу, что возвращаю строку, если B.Ratings IS NULL or B.Color IS NULL.

Так есть ли другой способ сравнить 1 строку таблицы от 1 до 1 строки таблицы 2 по всем столбцам (кроме столбца ID) и вернуть те строки, в которых есть несоответствие в любом из значений столбца?

+2

Добро пожаловать в SO. Код лучше всего понимать при чтении кода вместо его перевода на английский. Укажите [MCVE]. – user463035818

ответ

0

я путать :) Отредактировано: я получаю обратно в мой первоначальный ответ

SELECT A.* 
FROM db1.Fruit as A JOIN db2.Fruit as B ON 
(A.Name = B.Name AND A.Color = B.Color) 
WHERE A.Rating <> B.Rating 

LEFT OUTER JOIN бы дает строки с Nulls на левой стороне (и вы увидите правую часть его); что вы не хотите делать (по крайней мере, это мое настоящее понимание). Это заявление даст вам: информацию о db1, которая имеет то же имя и цвет, что и в db2, но рейтинг отличается (что, как я думал, это то, что вы хотите получить). Если вы хотите изменить комбинацию столбцов, вы должны изменить соединение.

+0

Внутреннее соединение даст мне строки, которые отличаются друг от друга. Мне нужны только те, которые есть в первом, но не во втором. Так что я должен использовать? Также я хотел знать, как использовать оператор <> и что делать, когда рейтинги или имя или цвет могут быть разными, если мы будем делать B.Name <> A.Name и B.Color <> A.Color? –

+0

Я хочу получить те строки, которые есть в первой, но не во второй базе данных. Также я хочу выбрать строки на основе комбинации столбцов. Я мог бы сделать это, используя команду EXCEPT или MINUS, но проблема в том, что она сравнивает все столбцы. Я не хочу сравнивать столбец идентификатора (идентификатор может быть другим, но остальные значения столбцов должны быть одинаковыми). Также, если значение равно нулю в этих столбцах в обеих базах данных, оно не должно возвращать эту строку. Команда, о которой я упомянул выше, также возвращает те строки, в которых значение в обоих столбцах равно null для этого столбца. Как я могу это сделать ? –

Смежные вопросы