*相似*列值上的sql联合

*相似*列值上的sql联合,sql,sqlite,Sql,Sqlite,在sqlite3数据库中,我有多个包含计算机名称的表 a.name, b.name, c.hostname, d.addr_host 我需要为子查询收集所有主机名。但是,这些表共享simliar名称值,例如,有些表的名称是simliar 1. a.name = machine001 2. b.name = machine001.domainname 是否可以使用查询创建包含所有主机名的单列 我相信你只是想: select a.name as hostname from a union -

在sqlite3数据库中,我有多个包含计算机名称的表

a.name, b.name, c.hostname, d.addr_host
我需要为子查询收集所有主机名。但是,这些表共享simliar名称值,例如,有些表的名称是simliar

 1. a.name = machine001
 2. b.name = machine001.domainname

是否可以使用查询创建包含所有主机名的单列

我相信你只是想:

select a.name as hostname from a
union -- intentionally eliminate duplicates
select b.name from b
union
select c.hostname from c
union
select d.addr_host from d;
如果您只希望名称一直到第一个
,则:

select substr(a.name, 1, instr(a.name || '.', '.') - 1) as hostname from a
union -- intentionally eliminate duplicates
select substr(b.name, 1, instr(b.name || '.', '.') - 1) from b
union
select substr(c.hostname, 1, instr(a.name || '.', '.') - 1) from c
union
select substr(d.addr_host, 1, instr(d.addr_host || '.', '.') - 1) from d;

谢谢,你能解释一下每个子串选择都发生了什么吗?还有没有一种方法可以使用like函数做类似的事情@乔什·沙基。“如果您只想让名称一直到第一个'”,这很好地解释了逻辑
like
返回一个布尔值,因此,如果需要字符串,则不需要使用该函数。