Sql子查询问题

时间:2011-06-07 22:12:35

标签: php mysql sql database

我有一个数据表,其中包含3列引用另一个表的id。

表1: idperson1_idperson2_idperson3_id

人: idfnamelname

在我的查询中返回fname而不是person1_id的最有效方法是什么?

5 个答案:

答案 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