【问题标题】:SQL: Beyond INNER JOIN (for lack of a better title)SQL: Beyond INNER JOIN(因为没有更好的标题)
【发布时间】:2011-08-01 17:29:27
【问题描述】:

环境:
- PHP 5.3.5
- Oracle 11g 数据库

表名:tips_categories

id类别图片 1个e.jpg 2 b f.jpg 3 c g.jpg

表格名称:提示

id 提示_categories_id 提示 1 3 这是一个提示。 2 2 这是另一个提示。 3 1 这是另一个提示。

想要的结果:

$array_name['提示'] [0] 类别 => 一个 图片 => e.jpg 提示 [0] => 这是另一个提示。 [1] 类别 => b 图片 => f.jpg 提示 [0] => 这是另一个提示。 [2] 类别 => c 图片 => g.jpg 提示 [0] => 这是一个提示。

编写一个返回所需结果的查询超出了我目前对 SQL 的了解。 INNER JOIN 不会返回所需的结果。如果不能在一个查询中完成, 我想必须使用以下两个查询:

从tips_categories中选择id、类别、图片
从提示中选择提示 WHERE Tips_categories_id = id

非常感谢有关如何在一个语句中编写此查询的建议。谢谢你:-)

【问题讨论】:

  • 为什么内部连接没有给出想要的结果?
  • 这看起来像是一个常规加入。你尝试了什么 sql,得到了什么?
  • 目前每个条目只有一个小费是巧合吗?也许您可以更新示例以显示您期望重复的地方。

标签: sql oracle oracle11g inner-join


【解决方案1】:

查询不返回分层结果集。所以你想做的事情是不可能的。

您可以编写一个简单的内连接查询,按id 排序,然后创建您自己的数组,遍历结果集并在每次id 更改时向数组中添加一个新条目。

查询:

SELECT tips.id,category,picture, tip
  FROM tips_categories
 INNER JOIN tips on (tips_categories_id = id)
 ORDER BY tips.ip

因此,您的结果集将类似于:

 id   category   picture  tip
 1    a          e.jpg    This is yet another tip A01.
 1    a          e.jpg    This is yet another tip A02.
 1    a          e.jpg    This is yet another tip A03.
 2    b          f.jpg    This is another tip B01.
 2    b          f.jpg    This is another tip B02.
 3    c          g.jpg    This is a tip C01.

如果您的tips 表中有更多条目。

您使用 PHP 进行迭代并在您的数组上生成所需的结果。它应该非常简单明了。

【讨论】:

  • 谢谢大家,非常快速、有用的回复!我最终使用了我原来的 INNER JOIN 语句,并使用结果集以我想要的格式构建了一个数组。抱歉,我的问题浪费了 StackOverflow 数据库中的空间。我的大脑感觉像是被翻过来了。现在该吃饭了:-)
【解决方案2】:

这个:

SELECT c.id, c.category, c.picture, t.tip
FROM tips_categories AS c
INNER JOIN tips AS t
    ON t.tips_categories_id = c.id

当然会返回您想要的数据,但tip 将只是第 4 列,而不是某种层次结构。

你用什么来根据结果构建你的数组?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 2016-12-23
    • 2011-01-27
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多