2015-06-15 3 views
0

Я пытаюсь сделать INNER JOIN на двух таблицах, имеющих похожие значения, но не совсем одинаковые. Одна таблица имеет полное имя хоста для своего первичного ключа, а другое - короткое имя хоста, а также субдомен. Можно с уверенностью предположить, что краткое имя и субдомен вместе уникальны.JOIN на ключах, которые не имеют одинакового значения

Так что я пробовал:

SELECT table1.nisinfo.* FROM table1.nisinfo INNER JOIN table2.hosts ON (table1.nisinfo.shortname + '.' + table1.nisinfo.subdomainname + '.domain.com') = table2.hosts.fqhn WHERE table2.hosts.package = 'somepkg'; 

Это не возвращает результаты, которые я ожидать, она возвращает первый результат в сотни раз. Я хотел бы вернуть отдельные строки. Также требуется много времени для запуска.

Что я делаю неправильно? Я думал о запуске подзапроса, чтобы получить имена хостов, но я не знаю, что такое правильный путь.

Спасибо!

+0

Вы можете поделиться обеими табличными структурами? –

ответ

0

Таким образом, в данном случае, я использовал подзапрос, чтобы получить первоначальные результаты, а затем использовали соединение.

SELECT table1.nisinfo.* FROM table1.nisinfo JOIN (SELECT distinct(fqhn) FROM table2.hosts WHERE package = 'bash') AS FQ ON ((SUBSTRING_INDEX(FQ.fqhn, '.', 1)) = table1.nisinfo.shortname); 
0

Попробуйте положить свои результаты в таблицу темп и затем просмотрите таблицу, чтобы убедиться, что столбцы соответствуют ожиданиям.

SELECT table1.nisinfo.*, table1.nisinfo.shortname + '.' + table1.nisinfo.subdomainname + '.domain.com' AS ColID 
 
INTO #temp 
 
FROM table1.nisinfo; 
 

 
Select * 
 
from #temp INNER JOIN table2.hosts ON @#temp.ColID = table2.hosts.fqhn 
 
WHERE table2.hosts.package = 'somepkg' 
 
;

Помещенный Группировать по статье в конце второго утверждения

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