如果使用连接未找到任何记录,则返回NULL值
问题描述:
如果没有使用连接的记录返回,则返回NULL值的SQL查询下方。如果使用连接未找到任何记录,则返回NULL值
我的查询:
SELECT
ISNULL((SELECT SR_No
FROM Product
WHERE SR_No in ('8877','9911')), NULL)
基本上我需要检查,如果SR_No
在Product
表中。
如何修改我的脚本来获取输出象下面这样:
表 - > 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 |
+-------+-------+--------+
答
这看起来很适合使用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);
答
试试这个:
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
您可以修改它输入子查询代替('8877','9911')
。
我不明白结果背后的逻辑。为什么应该存在一行空值?连接在哪里? –
@SamiKuhmonen:我如何在这里使用连接,基本上我需要检查产品表中可用的“SR_No” –
我仍然没有得到它 - 8877和9911都在产品和'Item_M'表中有行。另外,如果你在你的'WHERE'中列出了10个产品,并且它们都没有'合格',你期望10行NULL,还是你至少想要列出'SR_No'我认为*这是你在 - http://sqlfiddle.com/#!6/51f2c/2 – StuartLC