遍历表并根据条件添加条目

p5fdfcr1  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(245)
Table A (id, rollNumber, spaces)

示例数据

1 1 A
2 1 B
3 1 C
4 2 A
5 3 A

对于每个卷数,应该有3个空格,即a、b、c。然而,目前的条目并不一致。有的有,有的没有。
我必须遍历这个表,为任何没有的rollnumber添加b,c空间。

dfddblmv

dfddblmv1#

一种方法是生成一个日历表,其中包含您希望显示的所有不同数据。然后,使用 MINUS 带着一个 INSERT INTO ... SELECT 填充丢失的数据。

INSERT INTO yourTable (rollNumber, spaces)
SELECT r.rollNumber, s.spaces
FROM
(
    SELECT DISTINCT rollNumber FROM yourTable
) r
CROSS JOIN
(
    SELECT 'A' AS spaces UNION ALL
    SELECT 'B' UNION ALL
    SELECT 'C'
) s
LEFT JOIN yourTable t
    ON r.rollNumber = t.rollNumber AND s.spaces = t.spaces
WHERE
    t.rollNumber IS NULL;
cyvaqqii

cyvaqqii2#

SELECT *
FROM
  (SELECT DISTINCT rollNumber FROM t) r
  CROSS JOIN
  (SELECT DISTINCT spaces FROM t) s
  LEFT JOIN t
    ON s.spaces = t.spaces
    AND r.rollNumber = t.rollNumber

子表 r 以及 s 提取每个可能的值 rollNumber 以及 spaces ; 交叉连接使这些值的每一个可能的组合。然后,与原始表的左联接将提供所有这些组合,并在可能的情况下填充原始数据。

相关问题