我有两张桌子 - 顾客和产品,我有10个顾客和5个产品。
我可以通过查询加入:
select
ca.id as customer_id,p.id as product_id
from
customeraccount ca
left join
product p on ca.id = p.customeraccountid
如何重新获得类似于笛卡儿但不是笛卡儿的新表,如下所示:
Flaq是一个变量,表示该客户是否有此产品。
答案 0 :(得分:1)
CROSS JOIN可以解决您的问题
SELECT ca.id as customer_id,
p.id as product_id,
CASE WHEN ca.id=p.customeraccountid THEN 1 ELSE 0 END AS Flag
FROM customeraccount ca
CROSS JOIN product p
答案 1 :(得分:1)
如果您有两个表,您应该重新考虑您的设计。您至少应该为您的客户提供一个表格,一个用于您的产品,一个用于实际销售(或者您想在此处做的任何事情......)。
由于你是新来的,请给我一个提示:帮助SO社区一个好MCVE。在这里,我为你创建一个:
SQL-Server语法......
DECLARE @customer TABLE(CustomerID INT);
INSERT INTO @customer VALUES(1001),(1002),(1003);
DECLARE @prod TABLE(ProdID INT);
INSERT INTO @prod VALUES(1),(2),(3);
DECLARE @sales TABLE(CustomerID INT,ProdID INT);
INSERT INTO @sales VALUES(1001,1),(1001,3)
,(1002,1),(1002,2)
,(1003,2);
SELECT c.CustomerID
,p.ProdID
,CASE WHEN s.CustomerID IS NULL THEN 0 ELSE 1 END AS HasSale
FROM @customer AS c
CROSS JOIN @prod AS p
LEFT JOIN @sales AS s ON s.ProdID=p.ProdID AND s.CustomerID=c.CustomerID
结果
Cust Prod HasSales
1001 1 1
1001 2 0
1001 3 1
1002 1 1
1002 2 1
1002 3 0
1003 1 0
1003 2 1
1003 3 0