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空间。
答案 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
子表r
和s
提取rollNumber
和spaces
的每个可能值; CROSS JOIN将这些值的所有可能组合。然后,使用带有原始表的LEFT JOIN将为您提供所有这些组合,并在可能的情况下填充原始数据。
答案 1 :(得分:0)
一种方法是生成一个日历表,其中包含您希望出现的所有不同数据。然后,将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;