本文将分享您不能在FROM子句中指定要更新的目标表的详细内容,并且还将对您不能指定"-acdtrux"进行详尽解释,此外,我们还将为大家带来关于from子句中的JPA子查询、java–在JDBC中的Q
本文将分享您不能在 FROM 子句中指定要更新的目标表的详细内容,并且还将对您不能指定"-acdtrux"进行详尽解释,此外,我们还将为大家带来关于from子句中的JPA子查询、java – 在JDBC中的QUERY WHERE子句中指定变量名、MySQL #1093 - 你不能在 FROM 子句中为更新指定目标表“giveaways”、mysql – 错误#1093 – 您无法在FROM子句中为更新指定目标表’relProductsPrices’的相关知识,希望对你有所帮助。
本文目录一览:- 您不能在 FROM 子句中指定要更新的目标表(您不能指定"-acdtrux")
- from子句中的JPA子查询
- java – 在JDBC中的QUERY WHERE子句中指定变量名
- MySQL #1093 - 你不能在 FROM 子句中为更新指定目标表“giveaways”
- mysql – 错误#1093 – 您无法在FROM子句中为更新指定目标表’relProductsPrices’
您不能在 FROM 子句中指定要更新的目标表(您不能指定"-acdtrux")
我有一个简单的 mysql 表:
CREATE TABLE IF NOT EXISTS `pers` ( `persID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(35) NOT NULL, `gehalt` int(11) NOT NULL, `chefID` int(11) DEFAULT NULL, PRIMARY KEY (`persID`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;INSERT INTO `pers` (`persID`, `name`, `gehalt`, `chefID`) VALUES(1, ''blb'', 1000, 3),(2, ''as'', 1000, 3),(3, ''chef'', 1040, NULL);
我尝试运行以下更新,但只收到错误 1093:
UPDATE pers P SET P.gehalt = P.gehalt * 1.05 WHERE (P.chefID IS NOT NULL OR gehalt < (SELECT ( SELECT MAX(gehalt * 1.05) FROM pers MA WHERE MA.chefID = MA.chefID) AS _pers))
我搜索了错误并从 mysql 以下页面http://dev.mysql.com/doc/refman/5.1/en/subquery-
restrictions.html中找到,但这对我没有帮助。
我该怎么做才能更正sql查询?
答案1
小编典典问题是 MySQL,无论出于何种原因,都不允许您编写这样的查询:
UPDATE myTableSET myTable.A =( SELECT B FROM myTable INNER JOIN ...)
也就是说,如果您在表上执行UPDATE
// INSERT
,DELETE
则不能在内部查询中引用该表 (但是,您 可以
从该外部表中引用字段…)
myTable
解决方案是将子查询中的实例替换为(SELECT * FROM myTable)
,如下所示
UPDATE myTableSET myTable.A =( SELECT B FROM (SELECT * FROM myTable) AS something INNER JOIN ...)
这显然会导致必要的字段被隐式复制到临时表中,因此是允许的。
我在这里找到了这个解决方案。那篇文章的注释:
你不想
SELECT * FROMtable
在现实生活中只在子查询中;我只是想让示例保持简单。实际上,您应该只在最里面的查询中选择您需要的列,并添加一个好的WHERE
子句来限制结果。
from子句中的JPA子查询
我们正在开发一个使用EJB连接到数据库的Web应用程序。
在我们的数据库模型中,我们有一个移动设备表,另一个有功能表,最后一个有手机模型映射功能值的表。模型(id_model,…)功能(id_feature,…)model_features(id_model,id_feature,值)
我们想要执行一个查询,以按匹配特征的数量对模型进行排序。就是说,我们传递了一个要匹配的功能列表(即从1到9),并且我们希望所有包含“
yes”的设备至少是其中一个功能的值,并按照先前的说明对其进行排序。
我们创建了一个执行该工作的SQL查询,它可以工作:
SELECT CONCAT(subquery.numberf*100/9,"%") AS "Features", subquery.idModel AS "ID model"FROM (select count(*) AS numberf, id_model AS idModel FROM model_features WHERE value LIKE ''%Yes%'' AND id_feature IN(1,2,3,4,5,6,7,8,9) GROUP BY id_model) subqueryWHERE subquery.numberf > 0ORDER BY subquery.numberf DESC
由于我们使用的是JPA,因此必须构建JPQL查询,因此无法在FROM子句中包含子查询,并且我们想知道是否可以将子查询“传递”给WHERE子句,而不能以不良的方式影响性能。我们该怎么办?
答案1
小编典典最后,我们使用本机查询解决了:
String query = "SELECT ROUND(subquery.numberf*100/" + features + ",0) AS \"matches\", m.id_model AS \"id_model\", m.name AS \"name\", m.brand AS \"brand\", m.url_pict AS \"url_picture\"" + " FROM (select count(*) AS numberf, id_model AS idModel FROM model_features WHERE value LIKE ''%Yes%'' " + "AND id_feature IN(" + idFeatures + ") GROUP BY id_model) subquery, Models m WHERE subquery.numberf > 0 " + "AND subquery.idModel = m.id_model ORDER BY subquery.numberf DESC, m.name";return em.createNativeQuery(query).getResultList();
java – 在JDBC中的QUERY WHERE子句中指定变量名
private String getLastModified(String url) { String lastModified = null; ResultSet resultSet; String query = "select LastModified from CacheTable where " + " URL.equals(url)"; try { resultSet = sqlStatement.executeQuery(query); }
现在我需要一种语法,使我能够返回一个ResultSet对象,其中cacheTable中的URL等于方法参数的url.
谢谢
解决方法
String query = "select LastModified from CacheTable where url = '" + url +"'";
您应该使用绑定变量:
String query = "select LastModified from CacheTable where url = ?"; prepStmt = conn.prepareStatement(query); prepStmt.setString(1,url); rs = prepStmt.executeQuery();
MySQL #1093 - 你不能在 FROM 子句中为更新指定目标表“giveaways”
我试过了:
UPDATE giveaways SET winner = ‘1’ WHERE ID = (SELECT MAX(ID) FROM giveaways)
但它给出:
1093 - 您不能为更新中的FROM子句指定目标表“giveaways”
mysql – 错误#1093 – 您无法在FROM子句中为更新指定目标表’relProductsPrices’
我正在升级和优化旧的表结构.
为了正确使用替换,我删除了干扰2列新唯一密钥的旧僵尸条目.
查询:
DELETE from `relProductsPrices` where `ID` in
(SELECT scanA.ID from `relProductsPrices` as scanA
inner join `relProductsPrices` as scanB
where scanA.ID < scanB.ID
and scanA.product = scanB.product
and scanA.priceName = scanB.priceName);
错误:
#1093 - You can't specify target table 'relProductsPrices' for update in FROM clause
我不确定如何正确地将它放入一个mySQL查询中?
我希望这个问题没有重复的条目,我似乎无法找到类似的,适应性的条目.有关于此错误的问题,但我在这里根本没有更新查询,大多数人所说的解决方案(创建一个子选择)已经事先由我完成了.
提前致谢!
DELETE FROM `relProductsPrices`
WHERE `ID` IN (
SELECT
tmp.ID
FROM (
SELECT
scanA.ID
FROM
`relProductsPrices` as scanA
INNER JOIN `relProductsPrices` as scanB
ON scanA.ID < scanB.ID
AND scanA.product = scanB.product
AND scanA.priceName = scanB.priceName
) as tmp
);
今天关于您不能在 FROM 子句中指定要更新的目标表和您不能指定"-acdtrux"的分享就到这里,希望大家有所收获,若想了解更多关于from子句中的JPA子查询、java – 在JDBC中的QUERY WHERE子句中指定变量名、MySQL #1093 - 你不能在 FROM 子句中为更新指定目标表“giveaways”、mysql – 错误#1093 – 您无法在FROM子句中为更新指定目标表’relProductsPrices’等相关知识,可以在本站进行查询。
本文标签: