2013-02-26 5 views
0

У меня есть таблица с именем mainlinks, которая содержит около шести миллионов строк. Существует столбец с именем url, который содержит URL-адрес из Интернета, и еще два столбца с именем metaTitle и metaDesc, которые пусты в большинстве строк.Сравните значения двух таблиц mysql

У меня есть другая таблица, называемая links1, которая имеет около 3,5 миллионов строк, с колоннами URL, Utitle и metaDesc. Все URL-адреса в links1 также находятся в mainlinks. Links1 имеет несколько миллионов URL, которые имеют названия и мета: описания в своих столбцах Utitle и metaDesc. Теперь я пытаюсь получить SQL для сравнения двух таблиц, и где-либо links1 имеет название и описание для URL-адреса, чтобы скопировать эту информацию в metaTitle и metaDesc в mainlinks.

Я попытался следующий код:

UPDATE mainlinks 
INNER JOIN links1 ON (mainlinks.URL = links1.URL) 
SET mainlinks.metaTitle = links1.UTitle, mainlinks.metaDesc = links1.metaDesc 

PHPMYADMIN сказал мне, что несколько сотен записей были обновлены, хотя я знаю, за то, что она должна быть несколько миллионов. Простое быстрое просмотрение двух таблиц показало, например, «https://zvelo.com» в столбцах URL, но значения в столбцах Utitle и metaDesc не были скопированы до mainlinks. Любая идея, что может быть проблемой?

TIA!

EDIT: Может быть, может быть, что у одного из столбцов URL есть пробелы после фактического URL-адреса, который у другого нет, и что поэтому они воспринимаются как разные? Если да, как я мог обойти это?

+0

Является ли URL уникальным для обеих таблиц? Может ли быть вероятность того, что избыточный URL-адрес имеет две записи в ссылках1, где у одной записи есть данные для столбцов, а другая запись нет, поэтому в этом случае SQL просто обновляет main пустым .... Вы можете добавить условие, говорящее «где ссылки1. Desc not null' ... так далее ... – bonCodigo

+0

@bonCodigo да, они уникальны ... :-( – Phil

+0

@Phil - Согласно MySql должен иметь функцию 'TRIM', которая заботится как о верхнем, так и в конце пробелов. –

ответ

0

В соответствии с моим комментарием попытаться проверки пустых значений столбцов ...

SET mainlinks.metaTitle = links1.UTitle, mainlinks.metaDesc = links1.metaDesc 
WHERE NOT links1.UTitle IS NULL AND NOT links1.metaDesc IS NULL 
+0

О, я только что видел ваш комментарий. Это недействительно мой ответ. вы проверяете наличие белых пробелов при сравнении? – bonCodigo

+0

Мне бы хотелось попробовать, я просто не уверен, как :-). Есть идеи? – Phil

+0

@ Мы сожалеем, что все мы живем в разных полушариях Земли;) Я вижу, что вы получили ответ на удаление пробелов 'Trim'. Если у вас есть поле ID для таблицы 'mainlinks', попробуйте сделать сегмент по сегменту, чтобы увидеть, что ваша логика/синтаксис действительно работает. Скажем, например,вы можете обновить идентификатор от 1 до 1000. Тогда вам гораздо легче проверить. – bonCodigo

0

В этом случае ответ должен был избавиться от каких-либо перевода строки, закладок и т.д. во всех колонках. Я использовал

UPDATE table SET column = REPLACE(REPLACE(REPLACE(column, '\r', ''), '\n', ''), '\t', ''); 

Как только я сделал это на столбцах в обеих таблицах, все синхронизировано!

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