我有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表中的值現在在語義上並不重要,因爲此示例是原始查詢的簡化版本。我只想指出,我應該從產品表中獲取滿足品牌和規格表的那些標準的數據 –