我有一个像这样的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);
感谢任何帮助。
答案 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
上的索引都有助于提高效果。