我一直在使用带有php项目的postgresql数据库,我只是想构建一个查询。这就是场景。
假设我有几个表,FOO和BAR
表FOO看起来像这样:
| foo_id | foo_name | foo_data | ---------------------------------- | 1 | john | son | | 2 | jane | daughter | | 3 | sam | son | | 4 | sally | daughter |
表BAR看起来像这样
| bar_id | bar_foo_id | bar_fooParent_id | bar_content | ---------------------------------- | 1 | 1 | 1 | yabba-dabba-doo | | 2 | 2 | 1 | scooby-scooby-doo | | 1 | 3 | 888 | don't have a cow, man | | 2 | 4 | 999 | d'oh! |
我无法更改表架构,一切都按原样。
但是 - 我可以通过PHP传递一个值,让我们称之为PARENT,它代表bar_fooParent_id的值(所以我可以传递1,2,3 ...... 657,888,999等)。
表FOO中的 - foo_id映射到表BAR中的bar_foo_id。
我想构建一个SELECT Query,它组合来自表FOO和BAR的数据。类似的东西:
SELECT BAR.bar_content, (and other BAR.columns) , FOO.foo_name, FOO.foo_data
FROM FOO,BAR WHERE bar_fooParent_id=".$PARENT." AND " ...?
在哪里?有点混乱。
我需要根据表BAR中选定的行从表FOO中获取foo_name和foo_data的行。因此,如果将值1传递给$ PARENT,则bar_fooParent_id将为1,我将从表BAR获取前两行,并使用它们各自的bar_foo_ids(值为1和2)从表行中获取数据有foo_ids为1和2的FOO(在这种情况下是前两行)。
我尝试过类似下面的语句(为了简单起见,值是硬编码的)
SELECT * from BAR,FOO where BAR.bar_fooParent_id=1 AND (BAR.foo_id=1 OR BAR.foo_id=2) AND (FOO.foo_id=1 OR FOO.foo_id=3)
OR
select * from BAR where BAR.barr_fooParent_id=1 IN (SELECT foo_id,foo_name from kid WHERE foo_id=1 OR foo_id=3 )
没有太大的成功。基本上,数据应理想地返回为
foo_name | foo_data | bar_content | other BAR columns ... | _________________________________________________________________ john | son | yabba-dabba-do | etc. | jane | daughter | scooby-dooby-do| etc. |
(为格式化道歉,不确定第三个结果表会发生什么)
如果有人可以为postgreSQL构建这个SELECT查询,我会很感激。
任何想法?并谢谢。
爱德华
答案 0 :(得分:5)
听起来你需要的只是一个简单的连接:
SELECT f.foo_name, f.foo_data, b.bar_content
FROM foo f
INNER JOIN bar b ON b.bar_foo_id = f.foo_id
WHERE b.bar_fooParent_id = 1