sql :做虚拟行

sql : do dummy rows

我有一个 table 这样的:

a1   b1
a1   b2
a2   b2
a2   b3

我想做一个“虚拟行”来得到这样的结果:

a1   b1   1
a1   b2   1
a1   b3   0
a2   b1   0
a2   b2   1
a2   b3   1

我已经完成了 JOIN,但它花费的时间太长,因为我的 table 中有 1.4M 行,有人有更好的主意吗?

这是一种使用 SQL 服务器语法

的方法
DECLARE @dummyTable TABLE(aValue VARCHAR(10),bValue VARCHAR(10));
INSERT INTO @dummyTable VALUES
 ('a1','b1')
,('a1','b2')
,('a2','b2')
,('a2','b3');

WITH DistinctA AS
(SELECT DISTINCT aValue FROM @dummyTable)
,DistinctB AS
(SELECT DISTINCT bValue FROM @dummyTable)
SELECT a.aValue
      ,b.bValue
      ,CASE WHEN EXISTS(SELECT 1 
                        FROM @dummyTable AS dt 
                        WHERE dt.aValue=a.aValue AND dt.bValue=b.bValue) THEN 1 ELSE 0 END AS Existing 
FROM DistinctA AS a
CROSS JOIN DistinctB AS b
ORDER BY a.aValue,b.bValue