为了澄清标题,我有一张计算机表和一张更新表。我需要查看哪些计算机应用了特定更新,哪些计算机没有应用。
我有以下查询,它不会返回NULL
的{{1}}行。
f_logsoftware
以上回复如下:
SELECT
f_logmachine, f_logsoftware
FROM
tb_computers c
LEFT JOIN
tb_softwareinstalls s ON c.f_assetID = s.f_logmachine
WHERE
f_logsoftware = 'Java (7.0.750)'
但我希望输出如下:
f_logmachine f_logsoftware
-------------------------------
10001 Java (7.0.750)
10003 Java (7.0.750)
10005 Java (7.0.750)
10007 Java (7.0.750)
我已经尝试过" JOIN"的每一个组合。我能想到,但我很难过。
答案 0 :(得分:2)
当然它没有显示NULL
,因为您要过滤这些结果:WHERE f_logsoftware = 'Java (7.0.750)'
,而NULL
不等于'Java (7.0.750)'
。
您应该在加入之前过滤结果:
SELECT c.f_assetID as f_logmachine, f_logsoftware
FROM tb_computers c
LEFT JOIN ( SELECT *
FROM tb_softwareinstalls
WHERE f_logsoftware = 'Java (7.0.750)') s
ON c.f_assetID = s.f_logmachine
ORDER BY c.f_assetID
答案 1 :(得分:0)
如何搜索NULL:
SELECT f_logmachine ,
f_logsoftware
FROM tb_computers c
LEFT JOIN tb_softwareinstalls s ON c.f_assetID = s.f_logmachine
WHERE f_logsoftware = 'Java (7.0.750)'
OR f_logsoftware IS NULL
答案 2 :(得分:0)
由于WHERE f_logsoftware = 'Java (7.0.750)'
不限制返回的行,因此在where子句中看起来很奇怪。您要做的是将'Java (7.0.750)'
映射到自身,将f_logsoftware
的每个其他值映射为null。
尝试在投影中使用'CASE .. WHEN .. THEN .. ELSE..END'。