我一直在寻找,但无法找到答案,所以我希望有人可以提供帮助。我有两张桌子
表1(审计项目)
audit_session_id asset_number
Audit1 1
Audit1 2
Audit2 3
表2(资产)
asset_number location<br>
1 15
2 10
3 15
我想要的是一个资产表,显示在表2中,但在表1中没有显示给定位置和audit_session_id。我所拥有的是:
SELECT a.asset_number
FROM auditeditems ai
RIGHT JOIN asset a
on ai.asset_number = a.asset_number
WHERE ai.asset_number IS NULL
AND a.location_id=15;
但是我无法对audit_session_id进行过滤,因为它是NULL。所以我得到了结果:
1,3当它应该是1.(假设我正在查看audit1会话)
我一直认为这应该是直截了当但不能看出我出错的地方。在此先感谢
答案 0 :(得分:0)
你有一个不稳定的加入。尝试:
select A1.*
from Asset A1
left join AuditedItems A2
on A1.asset_number = A2.asset_number
where A1.location_id = 15
and A2.asset_number is null
答案 1 :(得分:0)
我相信您希望将条件放在ON
子句中:
SELECT a.asset_number
FROM auditeditems ai
asset a LEFT JOIN
auditeditems ai
ON ai.asset_number = a.asset_number AND
ai.audit_session_id = 'Audit1'
WHERE ai.asset_number IS NULL AND a.location_id = 15;
答案 2 :(得分:0)
使用JOIN
查找在您希望的会话和位置中审核的特定资产,然后使用“反加入”(例如使用NOT IN <table_epxression>
)查找所有其他资产:
SELECT asset_number
FROM asset
WHERE asset_number NOT IN ( SELECT asset_number
FROM asset
NATURAL JOIN
auditeditems
WHERE audit_session_id = 'Audit1'
AND location_id = 15 );