我有一个这样的数据库设置,有两个表:
CREATE TABLE users
(
id int auto_increment primary key,
username varchar(20),
password varchar(30),
auth_ip varchar(15),
account_type varchar(10),
server_name varchar(20)
);
CREATE TABLE servers
(
id int auto_increment primary key,
name varchar(20),
address varchar(30),
reserved boolean,
user varchar(20)
);
我正在尝试编写一个允许我按用户名搜索用户的查询,然后在server_name表中列出server_name为name的行的信息。例如,我可能有200个用户和5个服务器,所以当我搜索用户名foo521
时,它会返回用户表中的信息,以及server_name定义的服务器的服务器表。
我是SQL的新手,所以从基本的googlefu我认为最好的选择是做一些事情:
SELECT * FROM users WHERE username = "foo"
UNION
SELECT address FROM servers WHERE name = something.server_name
重要的是,这会使用一个查询返回结果,而不是倍数。有人可以提供一些意见吗?我正在使用SQLite,所以AFAIK它必须是一个平面文件数据库,但我可能错了。
答案 0 :(得分:2)
SELECT *
FROM `users` AS u
LEFT JOIN `servers` AS s
ON u.server_name = s.name
WHERE u.username = 'foo'
答案 1 :(得分:2)
你会想要做这种性质的事情:
SELECT u.*
FROM `users` AS u
INNER JOIN `servers` AS s
ON u.server_name = s.name
WHERE u.username = 'foo'
我会查看如何加入像here这样的表格,以便在@ Lamak的帖子和我的帖子中看到:
正如@Winkbrace所指出的,请确保正确设置主键/外键。您的一个主要ID应该是另一个表中的外键。完成后,您应该在联接中使用以下内容:
INNER JOIN `servers` AS s ON u.server_id = s.server_id