GVKun编程网logo

您不能在 FROM 子句中指定要更新的目标表(您不能指定"-acdtrux")

8

本文将分享您不能在FROM子句中指定要更新的目标表的详细内容,并且还将对您不能指定"-acdtrux"进行详尽解释,此外,我们还将为大家带来关于from子句中的JPA子查询、java–在JDBC中的Q

本文将分享您不能在 FROM 子句中指定要更新的目标表的详细内容,并且还将对您不能指定"-acdtrux"进行详尽解释,此外,我们还将为大家带来关于from子句中的JPA子查询、java – 在JDBC中的QUERY WHERE子句中指定变量名、MySQL #1093 - 你不能在 FROM 子句中为更新指定目标表“giveaways”、mysql – 错误#1093 – 您无法在FROM子句中为更新指定目标表’relProductsPrices’的相关知识,希望对你有所帮助。

本文目录一览:

您不能在 FROM 子句中指定要更新的目标表(您不能指定

您不能在 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// INSERTDELETE则不能在内部查询中引用该表 (但是,您 可以
从该外部表中引用字段…)


myTable解决方案是将子查询中的实例替换为(SELECT * FROM myTable),如下所示

UPDATE myTableSET myTable.A =(    SELECT B    FROM (SELECT * FROM myTable) AS something    INNER JOIN ...)

这显然会导致必要的字段被隐式复制到临时表中,因此是允许的。

我在这里找到了这个解决方案。那篇文章的注释:

你不想SELECT * FROMtable在现实生活中只在子查询中;我只是想让示例保持简单。实际上,您应该只在最里面的查询中选择您需要的列,并添加一个好的WHERE子句来限制结果。

from子句中的JPA子查询

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子句中指定变量名

java – 在JDBC中的QUERY WHERE子句中指定变量名

有人可以给我一个关于如何在JDBC中创建查询的链接,该查询在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”

MySQL #1093 - 你不能在 FROM 子句中为更新指定目标表“giveaways”

我试过了:

UPDATE giveaways SET winner = ‘1’ WHERE ID = (SELECT MAX(ID) FROM giveaways)
但它给出:

1093 - 您不能为更新中的FROM子句指定目标表“giveaways”

mysql – 错误#1093 – 您无法在FROM子句中为更新指定目标表’relProductsPrices’

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’等相关知识,可以在本站进行查询。

本文标签: