我有一個包含3列引用另一個表的ID的數據表。Sql子查詢問題
表1: id
,person1_id
,person2_id
,person3_id
人: id
,fname
,lname
是什麼返回我的查詢fname
和代替person1_id
的最有效的方法是什麼?
我有一個包含3列引用另一個表的ID的數據表。Sql子查詢問題
表1: id
,person1_id
,person2_id
,person3_id
人: id
,fname
,lname
是什麼返回我的查詢fname
和代替person1_id
的最有效的方法是什麼?
SELECT
a.id,
x.fname,
y.fname,
z.fname
FROM
table1 a
INNER JOIN people x ON x.id = a.person1_id
INNER JOIN people y ON y.id = a.person2_id
INNER JOIN people z ON z.id = a.person3_id
這正是我所需要的,也是有效的 – nathanjosiah 2011-06-20 21:41:56
不知道如果我的理解這個問題很好,但:
SELECT table2.data1 FROM table1 INNER JOIN table2 WHERE table1.o1=table2.id
的工作,但它只會拉第一個人的名字,我也需要person2和person3的名字 – nathanjosiah 2011-06-07 22:19:18
我發現顯式連接導致較少混淆。我將上面寫爲:SELECT table2.data1 FROM table1 INNER JOIN table2 ON table1.o1 = table2.id – 2011-06-07 22:20:28
只需添加「OR」子句即可獲取person2和person3的名稱。 – patapizza 2011-06-07 22:22:54
您是不是要找這樣的事:
SELECT table1.id, table2.data1 FROM table1 LEFT JOIN table2 ON table1.o1 = table2.id;
?
這是關於如何將數據格式化的猜測,但對於table1中的每個記錄聽起來都像是,您想用people表中的名字替換ID。
試試這個:
SELECT
id,
(SELECT fname FROM people WHERE id = person1_id) as Person1_fname,
(SELECT fname FROM people WHERE id = person2_id) as Person2_fname,
(SELECT fname FROM people WHERE id = person3_id) as Person3_fname
FROM
table1
這會給你所有記錄在表1和與第一名稱「取代」標識的,像這樣:
1, George, Chris, Judy
2, Sam, Jennifer, Sara
隨着
一表11, 1, 2, 3
2, 4, 5, 6
and a people table
1, George, Carlin
2, Chris, Rock
3, Judy, Smith
4, Sam, Elliot
5, Jennifer, Garner
6, Sara, Johnson
我假設在people.id上有一個唯一的約束。如果沒有,你需要在3個字段查詢中的fname之前放置一個TOP 1。
這樣做並不是非常有效的方法 - 由於性能,更好地使用JOIN。 – Xaerxess 2011-06-14 07:39:25
我認爲這可能會對您有所幫助。我把table1作爲樣本
SELECT sample.*,person.fname,p.fname FROM sample left join person on sample.p1=person.id, sample s left join person p on s.p2=p.id group by sample.id
你能提供更多關於你要查詢的內容的細節嗎?如果你有表1的id,你想要table2中的data1的值嗎? – 2011-06-07 22:17:57
我編輯我的問題,更具體的細節 – nathanjosiah 2011-06-07 22:19:55