【问题标题】:SQL Query syntax checkSQL 查询语法检查
【发布时间】:2017-04-17 10:54:06
【问题描述】:

谁能帮我写出这个要求。我似乎无法将空值与所有其他条件一起加载。

-- (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

这会加载所有结果,但不会加载还活着的艺术家。如果我将条件带出括号,它将带回所有活着的人,而不管其他条件如何。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    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)
    

    这应该会带回那些目前还活着的人。

    【讨论】:

    • 谢谢。我知道是括号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2010-10-29
    • 2018-09-13
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多