2016-08-12 57 views
0

我有一个位置数据库,可以有0到27种类型的可用日志。我只对1类日志的存在感兴趣,并希望在日志存在的情况下返回true或false。我尝试使用CASE WHEN,但问题是如果一个日志存在(这是所需的结果),我的结果显示真或假,然后为所有其他日志,所以我得到多个具有相同ID的行(这是不是我想要的)。 示例代码:sql:当存在多个项目时,检查ID是否仅存在一个特定项目

SELECT 
Table1.LocationId 
, CASE WHEN Table2.LogId = 8 THEN 'True' ELSE 'False' END AS 'Log8Avail' 

期望的结果将是:

| LocationID |Log8Avail| 
---------------------- 
| 1   | True | 
---------------------- 
| 2   | False | 
---------------------- 
| 3   | True | 
---------------------- 

但是目前我得到的是:

​​

我的问题是,我该如何调整自己的查询,以便它只查找我感兴趣的特定日志的存在与否?

+3

请显示您的完整查询。 “Table2.LogId”来自哪里?你的表定义是什么?另外,你使用的是什么DBMS? (MySQL?SQL Server?Oracle?其他?) – Siyual

+0

对不起。我是StackFlow和SQL的新手。下次我会发布完整的代码并指定DBMS。感谢您的反馈意见。 – Heather

回答

0
SELECT t1.LocationId, 
     CASE WHEN t2.LogID IS NULL 
      THEN false 
      ELSE TRUE 
     END as Log8Avail 
FROM Table1 t1 
LEFT JOIN Table2 t2 
     ON t1.id = t2.id 
    AND t2.LogId = 8 
+0

这工作!非常感谢。 – Heather

0
SELECT 
Table1.LocationId 
, CASE WHEN (SELECT COUNT(*) 
      FROM Table2 
      WHERE Table2.LogId = 8)>0 THEN 'True' ELSE 'False' 
    END AS 'Log8Avail' 

是这样的?

相关问题