我的问题是如何从表1的表1中获得每个结果的1个结果?而不是来自table2的结果?我已经搜索了堆栈溢出我发现如何使用id解决这个问题,但我想知道如何使用Varchar列来完成此操作。
表1
+--------------+-------------+
| Ip (Varchar) | Count (Int) |
+--------------+-------------+
| 1.1.1.1 | 9 |
| 1.1.1.2 | 6 |
| 1.1.1.3 | 1 |
+--------------+-------------+
表2
+-------------+--------------+
| Name (Text) | Ip (Varchar) |
+-------------+--------------+
| User01 | 1.1.1.1 |
| User034 | 1.1.1.1 |
| User012 | 1.1.1.1 |
| User21 | 1.1.1.2 |
| User24 | 1.1.1.2 |
| User3 | 1.1.1.3 |
+-------------+--------------+
通缉结果
+--------+---------+-------+
| Name | Ip | Count |
+--------+---------+-------+
| User01 | 1.1.1.1 | 9 |
| User21 | 1.1.1.2 | 6 |
| User3 | 1.1.1.3 | 1 |
+--------+---------+-------+
返回什么名称并不重要。
答案 0 :(得分:1)
由于您只需要一个随机名称,因此您可以使用group by
,因为您正在使用mysql
:
select t1.ip, t1.count, t2.name
from table1 t1
join table2 t2 on t1.ip = t2.ip
group by t1.ip
根据您的数据,您可能还需要outer join
。
答案 1 :(得分:1)
您应该首先在ip地址匹配的情况下将两个表连接在一起:
SELECT t2.name, t2.ip, t1.count
FROM firstTable t1
JOIN secondTable t2 ON t1.ip = t2.ip;
但是,这将返回第二个表中具有匹配ip的所有行,因此结果将出现多次。如果您只想查看特定的配对,则应按ip列进行分组:
SELECT t2.name, t2.ip, t1.count
FROM firstTable t1
JOIN secondTable t2 ON t2.ip = t1.ip
GROUP BY ip;
就name
而言,如果你不挑剔,你可以像上面那样保留它,它将被任意挑选,或者你可以选择像最小用户名一致的东西:
SELECT MIN(t2.name), t2.ip, t1.count
FROM firstTable t1
JOIN secondTable t2 ON t2.ip = t1.ip
GROUP BY ip;
这是一个SQL Fiddle示例。它显示了所有三个查询,因此您可以看到我采取的步骤。