我有一个数据表,其中包含3列引用另一个表的id。
表1:
id
,person1_id
,person2_id
,person3_id
人:
id
,fname
,lname
在我的查询中返回fname
而不是person1_id
的最有效方法是什么?
答案 0 :(得分:2)
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
答案 1 :(得分:1)
不确定我是否理解这个问题,但是:
SELECT table2.data1 FROM table1 INNER JOIN table2 WHERE table1.o1=table2.id
答案 2 :(得分:1)
这是关于你想要如何格式化数据的猜测,但是听起来像是table1中的每个记录,你想用人员表中的第一个名字替换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
这将为您提供table1中的所有记录,并使用名字'替换'id,如下所示:
1, George, Chris, Judy
2, Sam, Jennifer, Sara
使用table1
1, 1, 2, 3
2, 4, 5, 6
和
的人员表1, George, Carlin
2, Chris, Rock
3, Judy, Smith
4, Sam, Elliot
5, Jennifer, Garner
6, Sara, Johnson
我假设people.id也有一个独特的约束。如果没有,你需要在3个字段查询中将fname放在fname之前。
答案 3 :(得分:0)
你的意思是这样的:
SELECT table1.id, table2.data1 FROM table1 LEFT JOIN table2 ON table1.o1 = table2.id;
答案 4 :(得分:0)
我认为这可能会对你有所帮助。我把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