2017-04-10 40 views
1

我有兩個表tableAtableB,它們都有字段id, code, validFromvalidUntil。我試圖從tableA.code = tableB.code,tableA.validFrom = tableB.validFromtableB.validUntil = Null && tableA.validUntil != Null這兩個表中獲得ID。 我試了一個選擇與內部聯接MySql通過其他元素從兩個不同的表中選擇ID,然後ids

Select a.id, b.id from tableA as a 
inner join tableB as b ON 
    (a.code = b.code and a.validFrom = b.validFrom) 
where b.validUntil is Null and a.validFrom != Null 

但我得到0結果與此。 表例如

TableA 
id | code | validFrom | validUntil | Extra 
--------------------------------------------- 
1 | ABCD | 2010-01-01 | 2016-01-01 | NULL 
2 | EFA | 2010-01-01 | 2015-01-01 | 12 
3 | FAS | 2012-01-01 | 2017-01-01 | 13 

而且

TableB 
id | code | validFrom | validUntil | Extra 
--------------------------------------------- 
1 | EFA | 2010-01-01 | NULL  | 12 
2 | ABCD | 2010-01-01 | NULL  | NULL 
3 | FAS | 2012-01-01 | 2017-01-01 | 13 

所以結果應該是

TableA.id | TableB.id 
--------------------- 
    1 | 2 
    2 | 1 

編輯:

Select a.id, b.id from tableA as a 
left join tableB as b ON 
    a.code = b.code 
    and a.validFrom = b.validFrom 
    and a.Extra = b.Extra 
where b.validUntil is Null 
and a.validFrom is not Null 

回答

1

使用IS NOT NULL,而不是!= null。您不要在數據庫中使用與NULL值相等的運算符。更改以下條件

and a.validFrom != Null 

對此

and a.validFrom is not Null 

同樣,使用LEFT JOIN,而不是像

Select a.id, b.id from tableA as a 
left join tableB as b ON 
    a.code = b.code 
    and a.validFrom = b.validFrom 
where b.validUntil is Null 
and a.validFrom is not Null 
+0

是啊,我的壞忘了寫在這裏像那個用於Java –

+0

@LukasKarmanovas,請參閱編輯答案,如果有幫助。 – Rahul

+0

是的,這是工作,但即時通訊沒有得到所有的ID,即時獲取其中一些 –

0

呀什麼我想要做的是類似於@Rahul說

Select a.id, b.id from tableA as a 
left join tableB as b ON 
    a.code = b.code 
    and a.validFrom = b.validFrom 
where b.validUntil is Null 
and a.validFrom is not Null 
and (a.Extra = b.Extra or (a.Extra is NULL and b.Extra is NULL)) 
相關問題