我正在尝试对两个具有相似值的表进行INNER 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)
您可以在查询中使用group by,这样您就可以获得所需的结果 请看这两个链接
Group by with 2 distinct columns in SQL Server
http://www.sqlteam.com/article/how-to-use-group-by-with-distinct-aggregates-and-derived-tables
答案 1 :(得分: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'
;
在第二个陈述的末尾加上一个Group By子句
答案 2 :(得分: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);