我需要一个postgresql select查询语句的帮助

DJ *_*e J 1 php sql postgresql select

我一直在使用带有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 " ...?
Run Code Online (Sandbox Code Playgroud)

哪里?有点混乱.

我需要根据表BAR中选定的行从表FOO中获取foo_name和foo_data的行.因此,如果将值1传递给$ PARENT,则bar_fooParent_id将为1,我将从表BAR获取前两行,并使用它们各自的bar_foo_ids(值为1和2)从表行中获取数据具有1和2的foo_ids的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)
Run Code Online (Sandbox Code Playgroud)

要么

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 ) 
Run Code Online (Sandbox Code Playgroud)

没有太大的成功.基本上数据应该理想地返回为

foo_name  |  foo_data  | bar_content    | other BAR columns ... |
_________________________________________________________________
john      |  son       | yabba-dabba-do | etc.                  |
jane      |  daughter  | scooby-dooby-do| etc.                  |

(为格式化道歉,不确定第三个结果表发生了什么)

如果有人可以为postgreSQL构建这个SELECT查询,我会很感激.

有任何想法吗?并谢谢.

爱德华

Eri*_*lje 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
Run Code Online (Sandbox Code Playgroud)