2014-01-28 53 views
0

我是SQL语言的相对新手。我可以做一个基本的选择,但为了提高性能,我很想知道是否可以将我目前正在做的两个查询合并为一个。从参考表中获取字符串

场景:有两个表格。表一有几列,其中一个是名为'user'的VARCHAR(45),另一个是名为'gid'的INT。在第二个表中,有一个名为'gid'(INT)的主键列和一个名为'permissions'的列,它是一个TEXT列,它包含由';'分隔的值。

我有一个用户名,并希望在权限列中的文本。目前我这样做的方式是获取第一个表的gid,然后使用gid进行第二个查询以获取权限。

我听说还有其他方法可以做到这一点,并且我在Google上搜索过,但我不知道该怎么做。

编辑:

像这样:

enter image description here

+0

听起来像你想要一个联盟。如果你共享查询,这将有所帮助 –

+0

表结构和你正在使用的查询将会有所帮助 –

+0

我已经添加了一个表结构。 – LeoTietz

回答

1
select t2.permissions 
    from table1 t1, table2 t2 
where t1.user = '<SPECIFIED NAME>' 
    and t1.gid = t2.gid; 

或者你可以使用INNER JOIN语法:

select t2.permissions 
    from table1 t1 
    inner join table2 t2 on t1.gid = t2.gid 
where t1.user = '<SPECIFIED VALUE>' 
+3

可怕 - 使用现代连接不会教新用户这30年的废话 – Hogan

+0

而不是抱怨,你可以给出一个替代方案:'选择t2.permissions从表1 t1内部连接表2 t2在t1.gid = t2。 gid where t1.user =''' 30年前的废话表现很好。 – Ronald

+0

我确实给了一个替代方案。 – Hogan

0

要做到这一点,你使用JOIN。一个连接在select语句中连接两个表。

像这样

select * 
from usertable u 
join permissiontable p on u.gid = p.gid 

这会给你所有的两个表中的列与id列加入。你可以像对待任何表一样对待连接表(例如,在选择列表中选择一个子集,添加一个where子句等)。

你可以阅读更多关于在任何介绍的sql书籍或做谷歌搜索加入。

+0

为什么选择400万列,如果只需要一列?您的系统是否因未使用的网络带宽太多而受到影响? – Ronald

+0

@Ronald - 您是否错过了我所说的答案的部分*选择一个子集* *? – Hogan

+0

用'gid'改变'uid' – carexcer