0

我有两张桌子:

person
----------
id  name
1   peter
2   paul
3   mary
4   george
5   andy

living
-------
id  key
1   1
2   1
3   2
4   2
5   2

如果我知道名称,那么查找属于同一个人的所有 id 的最有效查询是什么。假设我想知道:“玛丽和谁住在一起”?在person中,Mary 的 id 是 3。我检查了living的 key,它属于 Mary,它是 2。现在我可以检索living中与 key 2 一起使用的所有 id,并且我有与 Mary 一起生活的 id。

这是我到目前为止得到的:

SELECT p2.name
  FROM person p1
  JOIN living l1
    ON p1.id = l1.id
  JOIN living l2
    ON l1.key = l2.key
  JOIN person p2
    ON l2.id = p2.id
 WHERE p1.name = 'mary'

有没有更好的办法?结果似乎还不错,但是执行三感觉不对JOINS

4

1 回答 1

0

在你的情况下你可以做的是:

 DEFINE name CHAR(15);
 LET name = 'mary'
define keyValue char(10);
select l.key into keyValue from person p left outer join living l on p.id= l.id and p.name= name

select p.*, l.* from person p left outer join living l on p.id=l.id 
where key= keyValue

我以前从未使用过 Informix,但是最好的解决方案应该是沿着这些思路,或者至少接近它们。谢谢

于 2013-10-23T09:53:30.907 回答