用查询打乒乓球

时间:2013-01-23 01:34:39

标签: postgresql

我有2个表的设置,这是相当好奇的。

表A: 它有多个列,但基本上是一组信息。 说:

------------------------------------
my_id| name | address | lat | long 

表B是表A的元素之间的关系列表的长列表: 例如:

------------------
my_id | parent_id

我想做的是以下内容:

对于任何A.my_id,获取B.my_id的列表,其中A.my_id为B.parent_id(也存在没有人的情况)然后:

获取此列表中的每个元素(我们刚刚获得),来自表A的lats和long用于这些id并从中创建一个2数组。

有人能指出我正确的方向吗?我对SQL很陌生,虽然我现在已经设法了,但这真让我感到困惑。

谢谢!

1 个答案:

答案 0 :(得分:0)

SELECT results.lat, results.long 
FROM a 
JOIN b 
    ON b.parent_id=a.my_id 
JOIN a AS results 
    ON results.my_id=b.my_id
WHERE a.my_id = 'the one I'm looking for'

忽略所选列一分钟,查询将为您提供表A中与您要查找的特定ID匹配的行(请参阅where子句),与B中具有相同父ID的行连接。您正在寻找的ID,再次与表A一起加入,这次行的ID与B中的ID匹配。

如果您的表格如下:

TABLE A
my_id| name | address | lat | long
  1    ABC    1234      10     20
  2    DEF    5678      15     19
  3    GHI    9101      17     21
  4    JKL    1121      18     18
 ...

TABLE B
my_id|parent_id
  1      4
  3      4
 ...

如果您执行此查询:

SELECT *
FROM a 
JOIN b 
    ON b.parent_id=a.my_id 
JOIN a AS results 
    ON results.my_id=b.my_id
WHERE a.my_id = 4

你应该得到这些结果:

a.my_id | a.name | a.address | a.lat | a.long | b.my_id | b.parent_id | results.my_id | results.name | results.address | results.lat | results.long
   4       JKL       1121       18       18        1          4             1             ABC                   1234           10             20
   4       JKL       1121       18       18        3          4             3             GHI                   9101           17             21

从那里我们只需更改SELECT中的列以影响结果。

这里的诀窍是在JOIN中的两个地方使用相同的表格(A)。