在构建我的数据库时遇到了一些问题,我会问两个问题.
第一个问题:下表需要用相同的ID合并
?????????????????????????????
? id* ? name ? age ? grade ?
?????????????????????????????
? 0 ? John ? ? ?
? 0 ? ? 11 ? ?
? 0 ? ? ? 6 ?
? 1 ? Dave ? ? ?
? 1 ? ? 12 ? ?
? 1 ? ? ? 7 ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
所以看起来应该是这样的;
?????????????????????????????
? id* ? name ? age ? grade ?
?????????????????????????????
? 0 ? John ? 11 ? 6 ?
? 0 ? Dave ? 12 ? 7 ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
注意:id*不是AUTO_INCREMENT
第二个问题:您可能认为以前的数据库结构很差.好消息是,我还没有创建数据库,我一直在寻找一种解决方案,将数据添加到现有行而不删除旧信息,但如果没有旧信息,它将创建一个新行.提前致谢.
处女表
?????????????????????????????
? id* ? name ? age ? grade ?
?????????????????????????????
? ? ? ? ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
一些SQL语句
?????????????????????????????
? id* ? name ? age ? grade ?
?????????????????????????????
? 0 ? John ? ? ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
具有不同参数的相同SQL语句
?????????????????????????????
? id* ? name ? age ? grade ?
?????????????????????????????
? 0 ? John ? ? ?
? 1 ? Dave ? ? ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
另一个SQL语句
?????????????????????????????
? id* ? name ? age ? grade ?
?????????????????????????????
? 0 ? John ? ? ?
? 1 ? Dave ? 12 ? ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
另一个SQL语句
?????????????????????????????
? id* ? name ? age ? grade ?
?????????????????????????????
? 0 ? John ? ? 6 ?
? 1 ? Dave ? 12 ? ?
?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
... 等等.
Tar*_*ryn 15
您应该能够将聚合函数应用于所有列,然后GROUP BY id:
select id,
max(name) name,
max(age) age,
max(grade) grade
from yourtable
group by id
Run Code Online (Sandbox Code Playgroud)
就数据库结构而言,我看到的唯一问题是您要为同一用户插入多个记录.您应该使用UPDATE语句来使用值而不是插入.
听起来你想REPLACE在MySQL中使用这个功能(这是一个教程).
所以查询将类似于:
REPLACE
INTO yourtable (`id`, `name`, `age`, `grade`)
VALUES (0, 'john', 11, null);
Run Code Online (Sandbox Code Playgroud)
您可以分组id,并使用任何聚合函数来选择非空行.此示例使用max,但min也可以使用:
select id
, max(name) as name
, max(age) as age
, max(grade) as grade
from YourTable
group by
id
Run Code Online (Sandbox Code Playgroud)