2015-03-31 174 views
1

我正在使用MySQL 5.6.23。在我的數據庫中,我有兩個表,tblFiles和tblLogs。表tblFiles包含一個ID(PK),文件路徑和文件名(都是VARCHAR)。SQL條件語句

表tblLogs包含一個ID(PK),一個referenceID(FK)到tblFiles中的一個條目和一個actionCode(0,1或2)。

條目中tblFiles可能看起來像:

1 | c:\root\files | test1.txt 
2 | c:\root\files | test2.txt 
3 | c:\root\files | test3.txt 

條目中tblFiles可能看起來像

1 | 1 | 0 
2 | 1 | 1 
3 | 2 | 0 
4 | 3 | 2 

我需要得到具有所有文件的路徑和文件名(從tblFiles)只有tblLogs中的actionCode 0。通過上面的例子中,查詢應該返回:

c:\root\files | test2.txt 

如果這個問題似乎很奇怪你,那是因爲這是我的任務的一部分。現在,我試圖找出只有actionCode 0的條目(即只得到一個返回referenceID 2的查詢)。我已經tryed不同的查詢,如:

SELECT referenceID FROM tblLogs WHERE actionCode = 0 AND (actionCode != 1 OR actionCode != 2); 

我甚至不知道這樣的查詢,甚至有可能,但...如果你們能幫助我,我將不勝感激!

+0

如果是這樣的情況:'actionCode = 0'沒有必要在所有的這樣的:'AND(actionCode! = 1 OR actionCode!= 2);' – 2015-03-31 04:06:47

+0

@Jorge Campos True。經過一些研究,我現在瞭解更多條件。我試圖找到一種方法從結果中「移除」可能具有actionCode 1或2的值。 – Siwirt 2015-03-31 04:22:58

回答

0

下面是使用maxmin一個辦法:

select f.loc, f.name 
from tblFiles f 
    join tblLogs l on f.id = l.referenceid 
group by f.loc, f.name 
having max(l.actioncode) = 0 and min(l.actioncode) = 0 
+0

這很好。我永遠不會猜到我們可以使用min和max這種方式!爲了我自己的好奇心,如果actionCode會是單個角色,你會怎麼做?或VARCHAR? – Siwirt 2015-03-31 04:23:31