【问题标题】:I have written a query and it is giving right dataset but don't know why it is not getting accepted?我写了一个查询,它给出了正确的数据集,但不知道为什么它没有被接受?
【发布时间】:2020-04-12 12:31:32
【问题描述】:

问题的链接是 在http://www.sql-ex.ru/learn_exercises.php#answer_ref

架构是

  • 产品(制造商、型号、类型)
  • PC(代码、型号、速度、内存、高清、光盘、价格)
  • 笔记本电脑(代码、型号、速度、内存、高清、屏幕、价格)

问题是找到生产个人电脑而不是笔记本电脑的制造商。

我写的查询是

select maker
from product, pc
where product.model=pc.model
and maker not in
(
  select maker
  from product,laptop
  where product.model=laptop.model
 )

我得到的信息是

您的查询在第一个(可用)数据库上返回了正确的数据集,但在第二个检查数据库上返回了错误的数据集。

  • 记录数错误(多 11 条)。

【问题讨论】:

  • 如果你正在学习 SQL,为什么不用JOIN
  • Gordon 的评论很重要,不应被学习者忽视。您使用的语法不是 ANSI 标准,通常已被弃用。
  • 我尝试过使用自然连接,但它不接受。你能写一个正确的查询吗?
  • 使用select distinct maker 而不是select maker
  • @forpas 这也不起作用 我收到消息 --- 您的查询在第一个(可用)数据库上返回了正确的数据集,但在第二个检查数据库上返回了不正确的数据集。

标签: mysql sql database select dml


【解决方案1】:

你可以用not existsjoin

select distinct p.maker
from product p inner join
     pc
     on pc.model = p.model 
where not exists (select 1 from laptop l where l.model = p.model);

但是,如果pc 表有重复行,join 将产生重复行。所以,你可以改用exists

select p.maker
from product p
where exists (select 1 from pc where pc.model = p.model) and
      not exists (select 1 from laptop l where l.model = p.model);

【讨论】:

  • 这不是一个正确的查询。它给出了错误的数据集。
  • @BrijeshJoshi 。 . .什么是错误的数据集,你明白了吗?
  • 这个查询给出 (A,A,B,E) 但正确答案是 (E)。
  • @BrijeshJoshi。 . .为什么只有E?为什么不A OR B ?您能否用您有问题的样本数据进行描述。
  • 我也不知道样本数据。我提供了问题的链接,即sql-ex.ru/learn_exercises.php#answer_ref。 .您可以运行查询来检查结果。
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多