【问题标题】:Matching values in two columns mysql query两列mysql查询中的匹配值
【发布时间】:2013-12-18 03:11:36
【问题描述】:

试图匹配同一张表中的两列。希望看到一个设备的输出馈送另一个设备的输入。这是数据示例。我知道格式不好,但我确实尝试过!有四列。

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  

【问题讨论】:

  • 所以你想看看输出是否与输入相同?
  • 是的,就像 s101 的 output_ip 是 r101 的输入 ip,所以我需要匹配这两列。
  • 所以在查询的输出中,我需要匹配 ip 的设备名称和名称。一开始我只是尝试了一些东西,比如选择名称、输出IP、服务,其中输出IP = 输入IP,但没有产生任何结果。搞砸了一些子查询,我失败了。

标签: mysql sql multiple-columns


【解决方案1】:

我不是 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

【讨论】:

  • 谢谢。明天我回到数据库时会试试。这看起来与我今天试图找到答案时浏览的其他帖子相似。我只是不熟悉您对 s.name 和 r.name 所做的事情。这是让我感到困惑的部分,我想了解更多。
  • 它被称为“加入”。想象一下桌子是一顶帽子,每一行都是一张包含数据的纸。现在拿另一顶帽子和那里的完全相同的论文,将一顶帽子的论文与其他符合ON 子句中条件的文件配对(这与WHERE 几乎相同)。 AS rAS s 部分只是帽子的名称,通常不需要它们,除非您想要一个快速或更短的表格名称,或者您有两次相同的表格(在这种情况下,您必须至少重命名一个避免歧义)
  • 感谢现实世界的类比。这有帮助。我试图运行该查询,它最终给了我一个内存不足的错误。该表有 170,000 行,上面的数据集遗漏了许多列。
  • 对于 170000 行内存不足有两种可能的解释:a) 数据库服务器的内存非常 少,b) 您拥有的数据需要更多逻辑来处理将一排与相应的排匹配。我会说是后者。 JOIN 的工作方式是,如果一个表中的多行使ON 条件为真,那么您最终将得到那么多行。在我提供的查询中,如果您有 3 行 output_ip A 和 100 行 input_ip A,那么您最终将得到 300 行结果。您显然需要进一步限制ON 条件,但我们需要更多数据
  • 这就是为什么我的回答开头是:我不是 100% 确定匹配数据的标准是什么
猜你喜欢
  • 2012-06-05
  • 2011-06-09
  • 1970-01-01
  • 2018-05-18
  • 2013-06-10
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多