2014-08-31 30 views
0

我有这样的查询和使用Infobright的数据库 -返回时没有记录存在服用点,Infobright的DB

select field1, field2 
from foo 
where filed1 in (1,2,3) 

我想要的东西,返回即使在表中没有记录。例如,有记录filed1 = 2 和filed1 = 2,但没有任何存在的filed1 = 3.

我怎么能使这个查询,所以我得到从表返回的field1 = 3的东西? 我可以使用ifnull的情况下,在field1 = 3的表中有一个空值,但我试图找到如果没有任何东西存在。

+0

可能的重复[返回结果从查询ev如果WHERE子句不符合](http://stackoverflow.com/questions/25530485/return-result-from-query-even-if-where-clause-not-met) – Bulat 2014-08-31 12:36:47

回答

2

如果字段1是独一无二的,你可以这样做:

SELECT 
    ISNULL(MAX(field1), 'Default F1') as field1, 
    ISNULL(MAX(field2), 'Default F2') as field2 
FROM foo 
WHERE field1 in (1,2,3) 
GROUP by field1 

否则,你可以使用UNION这样的:

SELECT field1, field2 
FROM foo 
WHERE filed1 in (1,2,3) 
UNION 
SELECT 'Default F1' as field1, 'Default F2' as field2 
WHERE (SELECT COUNT(*) FROM foo WHERE filed1 in (1,2,3)) = 0 
2

虽然这是你想要的ID值的简短列表,您可以创建选择/联合来创建ID,然后左连接到数据表类似

select 
     AllIDs.ID, 
     foo.field1, 
     foo.field2 
    from 
     (select 1 ID union select 2 union select 3) as AllIDs 
     left join foo 
      on AllIDs.ID = foo.field1 
相关问题