2013-12-18 155 views
0

尝试匹配同一表中的两列。希望看到一个设备的输出提供另一个设备的输入。这是一个数据样本。我知道格式不好,但我确实尝试过!有四列。匹配两列中的值mysql查询

name output_ip input_ip service 
s101 69.255.255.12 192.168.1.2 apple 
s101 69.255.255.12 192.168.1.3 orange 
s102 69.252.102.102 192.168.1.4 grape 
s102 69.252.102.102 192.168.1.5 kiwi 
s103 10.89.96.102 192.168.1.6 strawberry 
s103 10.89.96.102 192.168.1.7 banana 
s104 10.252.36.21 192.168.1.8 pear 
s104 10.252.36.21 192.168.1.9 plum 
r101 192.168.0.23 69.255.255.12 
r101 192.168.0.23 69.255.255.12 
r102 192.168.0.24 69.252.102.102 
r102 192.168.0.24 69.252.102.102 
r103 192.168.0.25 10.89.96.102  
r103 192.168.0.25 10.89.96.102  
r104 192.168.0.26 10.252.36.21  
r104 192.168.0.26 69.255.255.12 

想输出这样

s101 r101 apple 69.255.255.12 
s101 r101 orange 69.255.255.12 
s102 r102 grape 69.252.102.102 
S102 r102 kiwi 69.252.102.102 
S103 r103 strawberry 10.89.96.102 
S103 r103 banana 10.89.96.102 
S104 r104 pear 10.252.36.21 
S101 r104 69.255.255.12 
+0

哪里码? – Ljubisa

+0

所以你想看看输出是否与输入相同? –

+0

是的,像s101的output_ip是r101的输入ip,所以我需要匹配这两列。 – user3113612

回答

0

我不是100%肯定的是,以匹配数据的标准。

我最好的猜测是,你需要加入表本身,假设表名为data

SELECT 
    s.name, 
    r.name, 
    s.service, 
    s.output_ip 
FROM 
    data AS s 
    JOIN data AS r ON s.output_ip = r.input_ip 
GROUP BY 
    s.name, r.name, s.output_ip. s.service 
+0

谢谢。当我回到数据库时,我会在明天尝试。这看起来类似于我试图找到答案时正在查看的其他帖子。我只是不熟悉你在用s.name和r.name做什么。这是混淆我的部分,我想了解更多。 – user3113612

+0

它被称为“连接”。想象一下,桌子是一顶帽子,每一行都是一张纸和数据。现在再拿一个帽子,上面写着完全相同的文章,并将其中一个帽子上的文章与其他与ON条件中条件匹配的文件(与WHERE几乎相同)配对。 'AS r'和'AS s'部分只是帽子的名字,通常不需要它们,除非你想要一个表格的快或者更短的名字,或者你有两次相同的表格(在这种情况下,你必须重命名为其中至少有一个是为了防止模棱两可) – Toote

+0

感谢真实世界的类比。这有帮助。我试图运行该查询,它最终给我一个内存不足的错误。该表有170,000行,上面的数据集留下了许多列。 – user3113612