2016-12-02 126 views
-8

有人可以为我写这个需求。我似乎无法加载所有其他条件的空值。SQL查询语法检查

- (1)没有艺术家是80或以上 - 当他们 - 死亡时没有人是50或更小。

- (2)没有一位艺术家年龄分别为54岁,56岁, - 71岁或76岁。

- (3)一些艺术家还活着。

- (4)艺术家谁都是德国人和 - 专门摄影艺术('照片') - 不包括在内。

- (5)没有一个艺术家的字母'o' - 在他们的姓氏的任何地方。

- (6)艺术家没有名字 - 'Hannah','Julia'或'Frasier'。

select artist_id, first_name, last_name, died - born AS age, speciality, nationality 
from simon_antiques 
where Died - born Not in (54, 56, 71, 76) 
    AND first_name NOT IN ('Hannah', 'Julia', 'Frasier') 
    AND last_name not like '%o%' 
    AND (nationality <> 'German' or speciality <> 'Photo') 
    AND (died - born between 50 and 80 or died is null) 
Order by last_name 

这会加载所有结果,但不会加载仍然活着的艺术家。如果我从括号中提取条件,它将带回所有活着的人,无论其他条件如何。

回答

2

您的WHERE中的第一个子句只与died不为空的行匹配。考虑到,你可以重新排序这些条款,如:

WHERE first_name NOT IN ('Hannah', 'Julia', 'Frasier') 
    AND last_name NOT LIKE '%o%' 
    AND (nationality <> 'German' 
    OR speciality <> 'Photo') 
    AND ((died - born BETWEEN 50 AND 80 
     AND Died - born NOT IN (54, 56, 71, 76)) 
    OR died IS NULL) 

这应该带回那些当前活着的。

+0

谢谢。我知道这是括号。 –