SQL Join / WHERE问题

时间:2016-10-27 09:02:18

标签: mysql sql

我一直在寻找,但无法找到答案,所以我希望有人可以提供帮助。我有两张桌子

表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会话)

我一直认为这应该是直截了当但不能看出我出错的地方。在此先感谢

3 个答案:

答案 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 );