【问题标题】:Create a column with data from a join query使用连接查询中的数据创建列
【发布时间】:2018-03-29 19:37:36
【问题描述】:

我有两张桌子,

一个有项目的:

ic_items

 item_id  name                description 

      1   Pepperino           Hot sauce from Argentina
      2   Vamos el Couchiero  Hot sauce from Spain  

一票:(火焰=1票)

ic_flames

  flame_id  item_id

     1         1
     2         1
     3         2

现在我想连接它们。所以像这样的东西正在加入第一个表:

  item_id  name               description                 flame_counter

      1   Pepperino           Hot sauce from Argentina         2
      2   Vamos el Couchiero  Hot sauce from Spain             1

我使用这个查询:

SELECT ic_items.item_id, COUNT(ic_flames.flame_id) AS flame_counter
FROM ic_flames 
JOIN ic_items ON ic_items.item_id=ic_flames.item_id
GROUP BY ic_items.item_id

当我在 phpmyadmin 上填写此查询时,我得到一个带有火焰计数器的表,但是当我转到 ic_items 时,我没有看到火焰计数器。

如何将 flame_counter 放入我的 ic_items 表中?

【问题讨论】:

  • 我感觉您认为运行带有 JOIN 的查询会永久连接这些表。它不会!连接仅用于为该查询生成结果表。还是我误会了
  • 如果您希望连接看起来是永久的,请查看 VIEWS。创建一个视图,然后在您想像查看单个表一样查看此数据时使用它
  • @RiggsFolly 哦该死的.. 我希望它是永久的,是的。如何创建该视图

标签: sql join group-by sql-update alter-table


【解决方案1】:

你可以做一个子查询来计算ic_flames 中的表条目,它有当前的item_id。尽管在ic_flames 中实现一个反条目而不是每次投票都换行会更好。这是您的案例的未经测试的示例。希望对您有所帮助;)

SELECT   ic_items.item_id, 
         ic_items.name, 
         ic_items.description,
         (
         SELECT   COUNT(*) 
         FROM     ic_flames AS sub_ic_flames
         WHERE    sub_ic_flames.item_id = ic_items.item_id
         GROUP    BY sub_ic_flames.item_id
         ) AS flame_counter
FROM     ic_items

//编辑

要更新表ic_items 中的flame_counter,请使用以下查询。

UPDATE   ic_items
SET      flame_counter = (
             SELECT   COUNT(*) 
             FROM     ic_flames AS sub_ic_flames
             WHERE    sub_ic_flames.item_id = ic_items.item_id
             GROUP    BY sub_ic_flames.item_id
         )

【讨论】:

  • 它可以工作,但我如何将这个 flame_counter 放入 ic_items 表中?
  • @FoxOnFireHD 你为什么要这样做?通过该查询,您可以获得所需的数据。否则为什么还要有ic_flames 表?
  • 我明白你的意思,但对于一个学校项目,我需要有两个表并以某种方式连接它们。我希望这种联系是永久的。
  • @FoxOnFireHD 我更新了我的答案。希望这是你想要的。但是你需要flame_counter 表中的ic_items 字段。
  • @FoxOnFireHD 欢迎您!你介意接受我的回答吗?谢谢
【解决方案2】:

这里的选择就是这样做的,选择。如果要将它们添加到现有表中的现有项目,即UPDATE statement,并且如果要为这些值创建新列,则需要ALTER TABLE statement。在你的情况下,alter table 需要先出现,你需要combine your JOIN with an UPDATE,它看起来像这样:

ALTER TABLE table_name
ADD flame_counter int(250);

UPDATE ic_items
SET flame_counter = COUNT(flames.flame_counter)
FROM (
    SELECT ic_items.item_id, COUNT(ic_flames.flame_id) AS flame_counter
        FROM ic_flames 
    JOIN ic_items ON ic_items.item_id=ic_flames.item_id
    GROUP BY ic_items.item_id
) AS flames;

【讨论】:

  • 一个视图可能没有那么大的变化
  • 这可能是因为它被分组的列必须在选择中。我已经编辑了错误的答案(希望)
猜你喜欢
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2023-02-12
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多