4

在此小介绍的正下方,您将看到我正在使用的数据库表的布局,然后您将看到我的问题的详细信息。请提供尽可能多的指导。我仍在学习 PHP 和 SQL,我非常感谢您的帮助,因为我掌握了这个窍门。

表一('bue')——chp_cd rgn_no bgu_cd work_state

表二('chapterassociation')——chp_cd rgn_no bgu_cd work_state

数据库类型:PostgreSQL

我正在尝试对这两个表执行以下操作,我认为这是我必须做的一个 JOIN,但我对它并不是很熟悉,我正在努力学习。到目前为止,我已经创建了一个查询来从这些表中选择一组数据,这样查询就不会在整个数据库上运行。现在选择了数据,我正在尝试执行以下操作...

首先,表一('bue')的'work_state'应与表二('chapterassociation')的'work_state'进行核对。一旦找到匹配项,表一('bue')的'bgu_cd'应该与表二('chapterassociation')的'bgu_cd'相匹配。当找到两个匹配项时,它将始终指向第二个表中的唯一行(“章节关联”)。使用第二个表('chapterassociation')中的唯一行,'rgn_no'和'chp_cd'的值应该在第一个表('bue')中更新以匹配第二个表('chapterassociation')中的值。

我知道这可能要求很多,但如果有人可以帮助我构建一个查询来做到这一点,那就太好了!我真的很想学习,因为我不想永远对此一无所知。虽然我不确定我是否完全理解这里的 JOIN 和比较是如何工作的。

如果我是正确的,我将不得不将其放入单独的查询中,然后在 PHP 中。因此,例如,它可能是一些以最终查询的最终结果结尾的 IF ELSE 语句,它将表 2 中的值更新到表 1。

4

1 回答 1

3

JOIN 将为您进行两个级别的匹配...

  bue
INNER JOIN
  chapterassociation
    ON  bue.work_state = chapterassociation.work_state
    AND bue.bgu_cd     = chapterassociation.bgu_cd

实际算法由 PostreSQL 决定。它可以是合并、使用哈希等,并且取决于索引和有关数据的其他统计信息。但是您不需要直接担心,SQL 会为您抽象出来。

然后你只需要一种机制来将数据从一个表写入另一个......

UPDATE
  bue
SET
  rgn_no = chapterassociation.rgn_no,
  chp_cd = chapterassociation.chp_cd
FROM
  chapterassociation
WHERE bue.work_state = chapterassociation.work_state
  AND bue.bgu_cd     = chapterassociation.bgu_cd
于 2012-04-29T23:16:25.450 回答