2013-01-04 81 views
0

,我會繼續爲您展示一個簡單的例子來解釋與數據表查詢多個的組合一行選擇

table NAMES 
ID_NAMES 
NAME 

table AGES 
ID_AGES 
AGE 

這是我的查詢

SELECT 
( 
    select NAME 
    from NAMES 
    where ID_NAME=1 
) as thisismyname, 
(
    select AGE 
    from AGES 
    where ID_AGE=50 
) as thisiymyage 

我期待類似的結果

thisismyname, thisismyage 

我非常清楚,它是完全愚蠢的,因爲我可以做一個連接,並得到一個簡單的查詢,但有是表之間沒有聯繫,這將是50選擇,而不僅僅是兩個組合的結果。

它的工作,但我想要一個DataTable,我可以只使用

mydatatable[0]["thisismyname"] 

其實它給我查詢用的ExecuteScalar只是結果,而SqlDataReader的給我空的DataTable

using (var conn = Connection) 
{ 
    DbCommand mycommand = GetCommand(conn, sql); 
    DbDataReader reader = mycommand.ExecuteReader(); 
    dt.Load(reader); 
    reader.Close(); 
    conn.Close(); 
} 
+0

你舉的例子是沒有意義的。表格之間有一個鏈接,即'id'。我認爲你應該發佈另一個問題,並更好地解釋這個問題(對@NickBray來說,修改這個問題是不公平的,因爲這可能會導致他的回答不正確)。 –

+0

我發明了這個例子,讓我修改id列然後 –

+0

。 。你應該問另一個問題。尼克的回答是基於原始公式的正確答案。 –

回答

2

這應該在SQL中完成。如果你有問題,那麼你可以嘗試做一些獨特的事情。你不需要在你的表上加入索引來加入它們。

select distinct n.NAME, a.AGE 
    from NAMES n 
    JOIN AGES a on a.ID = n.ID 
    where n.ID=1 

你可以創建你在哪裏得到的兩個數據表和合並不知何故他們一些自定義代碼,但我不認爲這將是一個很好的解決方案。

如果由於某種原因,賬齡和名稱的ID是不同的,不能加盟,那麼你或許應該創建2個參數AgeId和填充NameID SQL查詢:

select distinct n.NAME, a.AGE 
    from NAMES n 
     cross join AGES a 
    where [email protected] 
    and [email protected] 
+0

。 。您應該使用'cross join'而不是'from'子句中的逗號。 「,」是古老的SQL語法。 –

+0

這不是一個連接 –