2016-06-27 36 views
0

首先讓我向您展示示例記錄。具有多個IN的複雜SQL語句

表:objekte

+--------+----------+---------+------------+ 
| objid | objidate | objmask | deletedate | 
+--------+----------+---------+------------+ 
| 271136 | 54084960 | 4  | 0   | 
| ... | ...  | ...  | ...  | 
+--------+----------+---------+------------+ 

表:objkeys

+----------+--------+------------+-------------------------------------+ 
| parentid | okeyno | okeyname |    okeydata    | 
+----------+--------+------------+-------------------------------------+ 
| 1511160 |  1 | BelegNr. | 634685        | 
| 1511160 |  2 | BELEGARTBK | oU = Lieferschein ohne Unterschrift | 
+----------+--------+------------+-------------------------------------+ 

現在,這裏是我到目前爲止已經試過:

SELECT * FROM objekte 
WHERE objid IN (
      SELECT MIN(parentid) as parentid FROM objkeys 
      WHERE okeyname = 'BelegNr.' 
      GROUP BY okeydata 
      HAVING COUNT(okeydata) = 1 
    ) AND objmask = '69' AND deletedate = '0' AND DATEADD(mi, objidate, '30.12.1899') >= DATEADD(day, -30, getdate()) 

預期輸出:
我要顯示所有OBJID從表objekteobjkeys.parentid = objekte.objid),其中存在的okeyname "Belegn"只有一條記錄,其中BELEGARTBK is "oU = Lieferschein ohne Unterschrift".

在我的SQL代碼,我可以顯示所有當前「獨特」的對象。但我目前無法過濾「BELEGARTBK」。有沒有簡單的方法來做到這一點?

+0

我會建議創建你已經顯示有更大量數據的SQL小提琴。我很不清楚你可以爲'BelegNr.'和'BELEGARTBK'值重複多少'okeyname'。這個數據庫設計看起來不錯 –

回答

0

對不起,這是不是很清楚你問什麼,嘗試用這種嵌套查詢:

SELECT parentid FROM objkeys 
    WHERE okeyname = 'Belegn' and okeydata = 'Lieferschein ohne Unterschrift' 
    GROUP BY parentid 
    HAVING COUNT(*) = 1