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

时间:2018-10-26 03:53:29

标签: mysql mysql-workbench

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空间。

2 个答案:

答案 0 :(得分:0)

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

子表rs提取rollNumberspaces的每个可能值; CROSS JOIN将这些值的所有可能组合。然后,使用带有原始表的LEFT JOIN将为您提供所有这些组合,并在可能的情况下填充原始数据。

答案 1 :(得分:0)

一种方法是生成一个日历表,其中包含您希望出现的所有不同数据。然后,将MINUSINSERT 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;