The
SELECTstatement cannot contain a subquery in theFROMclause.
如果修改包含此类子查询的 View ,为什么它所依赖的基关系的修改不明确?
编辑:我离找到解决方案越来越近了。如果您有一个包含学生 ID 和姓名的表,并且您想要创建一个包含所有非唯一姓名的 View ,如:
create view NonUnique as
select * from Student S1
where exists (select * from Student S2
where S1.sID <> S2.sID
and S2.name = S1.name)
然后 delete from NonUnique 指定了对 Student 表的模糊修改,因为您可以通过删除所有学生或仅删除少数学生来清除 View 只留下唯一命名的学生。
是否还有任何其他我们可以对包含子查询的 View 进行不明确修改的示例?
最佳答案
我没有发现删除有任何歧义。 DELETE FROM aView ; 应删除(如果允许) View 中基础表中的所有行。
CREATE TABLE Student
( sid INT NOT NULL
, name VARCHAR(20) NOT NULL
, PRIMARY KEY (sid)
) ;
INSERT INTO Student
(sid, name)
VALUES
(1, 'Alex'),
(2, 'Bill'),
(3, 'Cate'),
(4, 'Dean'),
(5, 'Eve'),
(6, 'Alex'),
(7, 'Bill'),
(8, 'Cate') ;
CREATE VIEW NonUnique AS
SELECT *
FROM Student S1
WHERE EXISTS
( SELECT *
FROM Student S2
WHERE S1.sID <> S2.sID
AND S2.name = S1.name
) ;
DELETE FROM NonUnique ;
它在正确实现了 DELETE 的 SQL 产品中运行良好。查看 SQL-Server 的 SQL-Fiddles和 Oracle :
SELECT * FROM Student ;
结果:
sid | name
----------
4 | Dean
5 | Eve
MySQL 报错:DELETE 的目标表 NonUnique 不可更新
Postgres 给出:错误:无法从 View “nonunique”中删除:
如果你在 MySQL 中尝试这个:
DELETE s
FROM Student AS s
JOIN
NonUnique AS n
ON n.sid = s.sid ;
或者这个:
DELETE
FROM Student
WHERE EXISTS
( SELECT *
FROM NonUnique
WHERE NonUnique.sid = Student.sid
) ;
错误是:表“NonUnique”的定义阻止了对表“Student”的 DELETE 操作。
然而,在 Postgres 中,第二个语句成功并删除了正确的行。
MySQL仅当您设法将 View 隐藏在派生表中时才会成功:
DELETE s
FROM Student AS s
JOIN
( SELECT *
FROM NonUnique
) AS n
ON n.sid = s.sid ;
关于mysql - 对 FROM 子句中具有子查询的 View 的修改不明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870810/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
protect_from_forgery默认Rails6应用程序不包含在我的应用程序Controller中,但是有嵌入式ruby在主应用程序布局中。这是否意味着protect_from_forgery方法已经被抽象并且在应用程序Controller中不再明确需要?我买了实用程序员的Rails6一书,我唯一能找到的是“csrf_meta_tags()方法设置了防止跨站点请求伪造攻击所需的所有幕后数据”。 最佳答案 对于rails5.2和更高版本,默认情况下在ActionController::Base上启用。查看此提交:https