mysql选择id中具有相同值的所有行

时间:2014-05-31 00:31:46

标签: mysql

我有一个像这样的SQL表

id|server_name|other|data|
__|___________|_____|____
1|server1     |data |data
2|server1     |data |data
3|server2     |data |data
4|server3     |data |data

我试图找到一个select语句,我可以在其中给它id,它将返回与我指定的id具有相同server_name的所有行。

所以我选择id = 2,我将从id 1和2获取行。

我试过这个,但它只是归还了一切。

SELECT * FROM `backups` WHERE EXISTS(SELECT `server_name` FROM `backups` WHERE `id` = 2);

感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

SELECT *
FROM backups
WHERE server_name = (SELECT server_name
                     FROM backups
                     WHERE id = 2)

SELECT b1.*
FROM backups AS b1
JOIN backups AS b2 ON b1.server_name = b2.server_name
WHERE b2.id = 2

答案 1 :(得分:1)

你很亲密。只需使用=将每行的server_name与子查询返回的值进行比较:

SELECT * FROM backups
WHERE server_name = (
  SELECT server_name
  FROM backups
  WHERE id = 2)

您也可以通过加入来实现:

SELECT b2.*
FROM backups b1
JOIN backups b2 ON b2.server_name = b1.server_name
WHERE b1.id = 2

无论哪种方式,server_name上的索引都有助于提高效果。