2014-01-28 147 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