【问题标题】:I need assistance with a postgresql select query statement我需要有关 postgresql 选择查询语句的帮助
【发布时间】:2012-12-19 09:27:03
【问题描述】:

我一直在使用带有 php 项目的 postgresql 数据库,我只是想构建一个查询。这就是场景。

假设我有几个表,FOO 和 BAR

表 FOO 如下所示:

| foo_id | foo_name | foo_data | ---------------------------------- | 1 |约翰 |儿子 | | 2 |简 |女儿| | 3 |山姆 |儿子 | | 4 |莎莉 |女儿 |

表格 BAR 看起来像这样

| bar_id | bar_foo_id | bar_fooParent_id | bar_content | ---------------------------------- | 1 | 1 | 1 |雅巴-达巴-斗 | | 2 | 2 | 1 |史酷比-史酷比| | 1 | 3 | 888 |没有牛,伙计| | 2 | 4 | 999 |哦! |

我无法更改表架构,一切照旧。

但是 - 我可以通过 PHP 传递一个值,我们称之为 PARENT,它表示来自 bar_fooParent_id 的值(所以我可以传递 1,2,3...657,888,999 等)。

并且 - 表 FOO 中的 foo_id 映射到表 BAR 中的 bar_foo_id。

我想构建一个 SELECT 查询,它结合了 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_id 为 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)

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 |其他 BAR 列 ... |
_________________________________________________________________
约翰 |儿子 |亚巴-达巴-多 |等|
简 |女儿|史酷比做|等等|

(对格式表示歉意,不确定第三个结果表发生了什么)

如果有人能帮助为 postgreSQL 构建这个 SELECT 查询,我将不胜感激。

有什么想法吗?谢谢。

爱德华

【问题讨论】:

  • 通过上述之前的查询尝试,我得到了重复的行被返回,所以这就是问题的“要点”。在上述情况下,我应该得到两行返回。
  • 您是否尝试过在您的SELECT 语句中应用关键字DISTINCT 来限制重复?

标签: php sql postgresql select


【解决方案1】:

听起来您只需要一个简单的连接:

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

【讨论】:

  • 我对本网站成员的出色表现感到谦卑。谢谢,这个查询很完美,我学到了关于 SQL 的一两件事!欢呼
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 2016-10-01
相关资源
最近更新 更多