SQL:如何 return 匹配 AND non-matching 具有 WHERE 条件的行
SQL: How to return matching AND non-matching rows with WHERE condition
为了澄清标题,我有 table 台计算机和 table 台更新。我需要查看哪些计算机应用了特定更新,哪些计算机没有应用。
我有以下查询,return NULL
行 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)'
上面的return是这样的:
f_logmachine f_logsoftware
-------------------------------
10001 Java (7.0.750)
10003 Java (7.0.750)
10005 Java (7.0.750)
10007 Java (7.0.750)
但我希望得到这样的输出:
f_logmachine f_logsoftware
-------------------------------
10001 Java (7.0.750)
10002 NULL
10003 Java (7.0.750)
10004 NULL
10005 Java (7.0.750)
10006 NULL
10007 Java (7.0.750)
我已经尝试了所有我能想到的 "JOIN" 组合,但我很难过。
也搜索 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
当然不会显示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
由于您的 WHERE f_logsoftware = 'Java (7.0.750)'
不限制返回的行,它在 where 子句中看起来很奇怪。您要做的是将 'Java (7.0.750)'
映射到自身,并将 f_logsoftware
的所有其他值映射到 null。
尝试在投影中使用 'CASE .. WHEN .. THEN .. ELSE .. END'。
为了澄清标题,我有 table 台计算机和 table 台更新。我需要查看哪些计算机应用了特定更新,哪些计算机没有应用。
我有以下查询,return NULL
行 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)'
上面的return是这样的:
f_logmachine f_logsoftware
-------------------------------
10001 Java (7.0.750)
10003 Java (7.0.750)
10005 Java (7.0.750)
10007 Java (7.0.750)
但我希望得到这样的输出:
f_logmachine f_logsoftware
-------------------------------
10001 Java (7.0.750)
10002 NULL
10003 Java (7.0.750)
10004 NULL
10005 Java (7.0.750)
10006 NULL
10007 Java (7.0.750)
我已经尝试了所有我能想到的 "JOIN" 组合,但我很难过。
也搜索 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
当然不会显示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
由于您的 WHERE f_logsoftware = 'Java (7.0.750)'
不限制返回的行,它在 where 子句中看起来很奇怪。您要做的是将 'Java (7.0.750)'
映射到自身,并将 f_logsoftware
的所有其他值映射到 null。
尝试在投影中使用 'CASE .. WHEN .. THEN .. ELSE .. END'。