我有3个表:可选连接表中的SQL与可能的空值
DECLARE @PRODUCT TABLE(PRODUCTID INT,TITLE NVARCHAR(MAX),BRANDID INT,SPECID INT)
DECLARE @SPEC TABLE(SPECID INT,TITLE NVARCHAR(MAX))
DECLARE @BRAND TABLE(BRANDID INT,TITLE NVARCHAR(MAX))
INSERT INTO @PRODUCT
SELECT 1,'TV',1,8 UNION ALL
SELECT 2,'PC',2,12
INSERT INTO @BRAND
SELECT 1,'SAMSUN' UNION ALL
SELECT 2,'GRUNDING'
INSERT INTO @SPEC
SELECT 8,'PRICE' UNION ALL
SELECT 9,'WEIGHT'
我想从@PRODUCT表导致如果@BRAND或@SPEC 至少一个表格有数据。所以,我想用LEFT JOIN这样的:
SELECT p.* ,
s.*,
b.*
FROM @PRODUCT p
LEFT JOIN @BRAND b ON b.BRANDID = p.BRANDID AND b.BRANDID IS NOT NULL
LEFT JOIN @SPEC s ON s.SPECID = p.SPECID AND s.SPECID IS NOT NULL
,但无法得到期望的结果。对于我提供的数据,我想过滤仅与产品标题电视。所以,我想申请可选加入。我的意思是,如果@BRAND或@SPEC表有数据,或者两者都有数据,则应根据该条件过滤产品。
任何人都可以帮助我解决这个问题吗?
编辑 根据要求,我提供了更多的表格数据。
INSERT INTO @PRODUCT
SELECT 1,'TV',1,8 UNION ALL
SELECT 2,'PC',2,12 UNION ALL
SELECT 2,'PHONE',505,10
INSERT INTO @BRAND
SELECT 1,'SAMSUN' UNION ALL
SELECT 2,'GRUNDING'
INSERT INTO @SPEC
SELECT 8,'PRICE' UNION ALL
SELECT 9,'WEIGHT' UNION ALL
SELECT 10,'SIZE'
对于这个数据,我只想得到ProductID为1的产品的行。所以,我只需要在这个例子中选择这一行。
SPEC和BRAND表中的值现在在语义上并不重要,因为此示例是原始查询的简化版本。我只想指出,我应该从产品表中获取满足品牌和规格表的那些标准的数据 –