我有一个包含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