如果使用连接未找到任何记录,则返回NULL值

如果使用连接未找到任何记录,则返回NULL值

问题描述:

如果没有使用连接的记录返回,则返回NULL值的SQL查询下方。如果使用连接未找到任何记录,则返回NULL值

我的查询:

SELECT 
    ISNULL((SELECT SR_No 
      FROM Product 
      WHERE SR_No in ('8877','9911')), NULL) 

基本上我需要检查,如果SR_NoProduct表中。

如何修改我的脚本来获取输出象下面这样:

表 - > Item_M:

+-------+---------+ 
| SR_No | Asso_Id | 
+-------+---------+ 
| 4455 |  100 | 
| 4455 |  200 | 
| 4455 |  300 | 
| 8877 |  500 | 
| 9911 |  600 | 
+-------+---------+ 

表-1>产品:

| SR_No | Pro_N | Pro_Sc | 
+-------+-------+--------+ 
| 4455 | SA | S  | 
| 8877 | BT | B  | 
|  | 
+-------+-------+--------+ 

预期输出:

+-------+-------+--------+ 
| SR_No | Pro_N | Pro_Sc | 
+-------+-------+--------+ 
| 8877 | BT | B  | 
| NULL | NULL | NULL | 
+-------+-------+--------+ 
+4

我不明白结果背后的逻辑。为什么应该存在一行空值?连接在哪里? –

+0

@SamiKuhmonen:我如何在这里使用连接,基本上我需要检查产品表中可用的“SR_No” –

+1

我仍然没有得到它 - 8877和9911都在产品和'Item_M'表中有行。另外,如果你在你的'WHERE'中列出了10个产品,并且它们都没有'合格',你期望10行NULL,还是你至少想要列出'SR_No'我认为*这是你在 - http://sqlfiddle.com/#!6/51f2c/2 – StuartLC

这看起来很适合使用Table Valued Constructor来创建您正在查找的物品的表格,然后您可以将产品(和可能的物品)表格添加到其中,以便选择性地显示其他列,或NULL,如果符合条件的不符合标准的:

-- If you want the SR_No number listed along with NULLs 
SELECT x.SR_No, p.Pro_N, p.Pro_Sc 
FROM (values (8877),(1234)) as x(SR_No) 
LEFT OUTER JOIN Product p 
on x.SR_No = p.SR_No; 

输出:

SR_No Pro_N Pro_Sc 
8877 BT  B 
1234 (null) (null) 

如果你不想显示SR_No值中的空白旁边:

-- If you want the SR_No listed as NULL instead 
SELECT p.SR_No, p.Pro_N, p.Pro_Sc 
FROM (values (8877),(1234)) as x(SR_No) 
LEFT OUTER JOIN Product p 
on x.SR_No = p.SR_No; 

,并提供:

SR_No Pro_N Pro_Sc 
8877 BT  B 
(null) (null) (null) 

与第二种方法的问题是,你会显示是否有多个非匹配,这是不太可能你的代码有用NULL列的多行使用此查询。

如果您需要进一步验证,必须有本作的产品项目行以及随后调整查询:

LEFT OUTER JOIN Product p 
on x.SR_No = p.SR_No AND EXISTS (SELECT 1 FROM Item_M i WHERE i.SR_No = p.SR_No); 

SqlFiddle here

试试这个:

SELECT CASE WHEN SR_No IN ('8877','9911') THEN SR_No END AS SR_No, 
     CASE WHEN SR_No IN ('8877','9911') THEN Pro_N END AS Pro_N, 
     CASE WHEN SR_No IN ('8877','9911') THEN Pro_Sc END AS Pro_Sc 
FROM Product 

SQL Fiddle

您可以修改它输入子查询代替('8877','9911')