如何在多个表中查询具有相同列名的记录

时间:2019-06-24 18:51:54

标签: mysql sql select mariadb

我有一个包含两个表,交换机和路由器的数据库。两个表中的列具有相同的名称(dev_name,dev_ip等)。

我需要知道如何查询两个表并查找具有特定主机名的单个记录。因此,如果我的PHP表单是按设备名称查询数据库,那么我想查询整个数据库(所有表)并查找具有要查询的设备的表/行。

我尝试过这样的查询:

SELECT * FROM switches,routers 
WHERE switches.dev_name = 'coreswitch01' OR routers.dev_name = 'core01switch';

但是它给了我一个串联的输出,该输出包括路由器表和coreswitch01中的每个路由器重复。

SELECT * FROM switches,routers 
WHERE switches.dev_name = 'coreswitch01' OR routers.dev_name = 'core01switch';

我希望构造一个查询,该查询可以读取两个表并找到coreswitch01的记录,并仅向我显示它在其中找到的任何表中的一条记录。

3 个答案:

答案 0 :(得分:1)

您可以使用Public Sub refresh_cf2() Dim dataConn As New ADODB.Connection Dim strSQL As String Dim strCON As String Dim strCmd As New ADODB.Command Dim loadTable As QueryTable Dim qt As QueryTable Dim rst As ADODB.recordSet Dim connstring As String Dim sqlstring As String Sheet3.AutoFilterMode = False For Each qt In Sheet3.QueryTables qt.Delete Next Sheet3.Range("A1:NTM300000").Cells.Clear sqlstring = "Select * from tableB " connstring = _ "ODBC;DSN=PostgreSQL35W2;UID=user name;PWD=user password;Database=dbB;Port=5434" With ActiveSheet.QueryTables.Add(Connection:=connstring, _ Destination:=Range("A1"), SQL:=sqlstring) .Refresh End With End Sub 集运算符:

union all

答案 1 :(得分:0)

每当我看到两个具有相同(或几乎相同)列的表时,我会问:“为什么这两个表没有合并成一个表?”您可能需要额外的一列来说明它是哪种东西(路由器还是交换机),但这只是很小的开销。

但是,假设您有2张桌子...

对于您的特定查询,这是最佳选择:

( SELECT * FROM switches  WHERE dev_name = 'coreswitch01' )
UNION ALL
( SELECT * FROM routers   WHERE dev_name = 'coreswitch01' )

这假设您在每个表的dev_name上都有一个索引。

答案 2 :(得分:0)

如果要确定数据表的原点,可以创建一个类似于“ origin”的新字段:

SELECT *
FROM   (SELECT 'switches' as origin, * FROM switches
        UNION ALL
        SELECT 'routers'  as origin, * FROM routers) t
WHERE  dev_name = 'coreswitch01'