2015-03-31 123 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