2013-04-23 62 views
1
create table "users"(
    "id"  SERIAL PRIMARY KEY NOT NULL, 
    "full_name" varchar(100) NOT NULL, 
    "role"  integer NOT NULL DEFAULT 0, 
    "email"  varchar(100) NOT NULL 
); 

create table "devices"(
    "id" SERIAL PRIMARY KEY NOT NULL, 
    "brand_name" varchar(20) NOT NULL 
); 

create table "users_and_devices"(
    "user_id" integer NOT NULL, 
    "device_id" integer NOT NULL, 
    foreign key (user_id) references users(id), 
    foreign key (device_id) references devices(id) 
); 

如何获得属于user 1的所有设备的brand_name?我应该添加索引user_iddevice_idusers_and_devices过滤多对多(PostgreSQL)

谢谢。

+0

您可能应该在'users_and_devices'表上有'PRIMARY KEY(user_id,device_id)'。这不仅可以防止无意义的重复,而且还可以作为索引来加速您正在查找的查询。 – 2013-04-24 02:05:28

回答

1

所有你需要做的就是跨设备和users_and_devices表的简单连接。你尝试过吗?

select brand_name 
from devices d 
left join users_and_devices ud on (ud.device_id=d.id) 
where ud.user_id=1 

是的,我把一个指数USER_ID和DEVICE_ID因为你将要查询的表,这些具体的列。

1

由USER_ID 1拥有的所有品牌,消除重复:

select distinct d.brand_name 
from users_and_devices ud 
inner join devices d on ud.device_id = d.id 
where ud.user_id = 1