【问题标题】:How to build a new MySQL Table from 2 MySQL Tables without PHP如何在没有 PHP 的情况下从 2 个 MySQL 表构建一个新的 MySQL 表
【发布时间】:2013-04-09 05:27:38
【问题描述】:

我有 2 个表我想合并到第三个表中我想纯粹作为 MySQL 查询而不是选择行并使用 PHP while() 来构建第三个表。

表 1 包含以下内容

ID Name
1  A
2
3

表 2 包含以下内容

ID  Desc
10
15  B
20

我想编写一个查询语句来生成以下组合表,但我只希望新的 Desc 包含表 1 中的 Name 或表 2 中的 Desc 中的非空白值,表 2 优先于表 1如果两个表都包含非空白

ID1 ID2 Desc
1   10  A
1   15  B
1   20  A
2   10
2   15  B
2   20
3   10
3   15  B
3   20

这是否可以作为 MySQL 查询我应该使用 PHP 方法吗?

谢谢。

【问题讨论】:

  • 和这个问题基本一样:stackoverflow.com/questions/2112043/…
  • 大多数与数据相关的过程都可以在纯 SQL 中实现...请参阅 here 以获得答案。
  • 好吧,也许是@LawsonCulver。但是我不想“创建”一个新表本身...我想通过将它重置为表 1 和表 2 中的数据来刷新一个已经存在的表。它会是一个“更新表结果为... ” 而不是?
  • 如果您要“重置”数据,您不妨先删除行,然后使用 INSERT(只要没有需要保留的内容。)如果您不这样做不想在那里丢失其他东西,它变得更加复杂。当它存在时你必须更新,当它不存在时你必须插入。

标签: php mysql


【解决方案1】:

想想,你需要这个……

select t1.id as id1, t2.id as id2, if(length(t2.name), t2.desc, t1.name) as desc from t1,t2;

【讨论】:

  • 我认为解决方案需要比这更强大,因为它需要包含“INSERT INTO”才能构建新表(至少我是这么认为的)。 @v.sheldeshov
  • 健壮的。试着打破它! )) .... 它也适用于 mysql 3 等古老的 sql 引擎
  • 好吧,我的问题是我没有看到所选数据如何插入表 3 @v.sheldeshov
  • 您可以使用“插入选择”语法进行插入。 1keydata.com/sql/sql-insert-into-select.html
【解决方案2】:

你可以这样做:

SELECT a.ID as ID1, b.ID as ID2, (CASE WHEN b.Desc is not null THEN b.Desc ELSE a.Name END) as Desc from Table1 a full join Table2;

但这是未经测试的......祝你好运。

问候

芦苇

【讨论】:

  • 我认为解决方案需要比这更强大,因为它需要包含“INSERT INTO”才能构建新表(至少我是这么认为的)。 @parascus
  • 您可以通过“create table x as SELECT ...”创建新表,前提是表已经存在,您必须使用“INSERT INTO”。
【解决方案3】:
insert into TableThree (id1, id2, Descr)
select
    T1.id,
    T2.id,
    case LENGTH(TRIM(T2.Descr))
        when 0 then T1.Name
        else T2.Descr
    end
from TableOne T1, TableTwo T2
order by 1, 2

【讨论】:

  • 不错的@ChrisPiazza .. 看起来像是我可以使用的东西。一旦我得到它的工作,我会发布我的结果并接受你的解决方案作为答案。非常感谢您的帮助...
  • 你是明星@ChrisPiazza!那工作得很好。非常感谢您的帮助(和学习)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多