[英]JOIN across two tables
我需要從postgresql數據庫中提取一些數據,並從兩個表中的每一個中獲取一些元素。 這些表包含與物理網絡設備有關的數據,其中一個表專門用於這些設備的mac地址。 每個設備均按位置(車輛)和功能(dev_name)標識。
表1(資產):
vehicle
dev_name
dev_serial
dev_model
table2:(macs)
vehicle
dev_name
mac
interface
我試過的
SELECT assets.vehicle, assets.dev_name, dev_model, dev_serial, mac
FROM assets, macs
AND interface = 'E0'
ORDER BY vehicle, dev_name
;
但這似乎不符合我想的那樣匹配vehicle和dev_name。 相反,它似乎打印了mac和dev_serial的每種組合,這不是預期的輸出,因為我要為每一行輸出一行。
如何根據assets.dev_name = macs.dev_name和assets.vehicle = macs.vehicle確保它與設備的mac地址匹配?
注意: assets
某些設備可能沒有在mac
記錄的mac地址,在這種情況下,我希望無論如何它們都顯示為空的mac
使用join
您可以指定必須匹配的列
SELECT a.vehicle, a.dev_name, dev_model, dev_serial, mac
FROM assets a
LEFT JOIN macs m ON m.vehicle = a.vehicle
AND m.dev_name = a.dev_name
WHERE interface = 'E0'
ORDER BY a.vehicle, a.dev_name
了解有關SQL連接的信息 。
select
a.vehicle, a.dev_name, a.dev_model, a.dev_serial, m.mac
from assets as a
inner join macs as m on m.dev_name = a.dev_name and m.vehicle = a.dev_name
where m.interface = 'E0'
order by a.vehicle, a.dev_name
在您的情況下,它是內部聯接,但是如果要獲取所有資產並為接口E0的那些顯示mac,則可以使用左外部聯接 :
select
a.vehicle, a.dev_name, a.dev_model, a.dev_serial, m.mac
from assets as a
left outer join macs as m on
m.dev_name = a.dev_name and m.vehicle = a.dev_name and m.interface = 'E0'
order by a.vehicle, a.dev_name
一個簡單的join關鍵字就是您解決問題的方法
SELECT assets.vehicle, assets.dev_name, dev_model, dev_serial, mac
FROM assets A join macs M
ON A.dev_name = M.dev_name
否則繼續您的方法,只需按如下所示修改查詢:
SELECT assets.vehicle, assets.dev_name, dev_model, dev_serial, mac
FROM assets, macs
WHERE interface = 'E0' AND assets.dev_name = macs.dev_name
ORDER BY vehicle, dev_name;
請記住,對於任何聯接而言,條件都非常重要,否則,它將變成另一個交叉聯接,即每行與每隔一行的組合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.