相关疑难解决方法(0)

您无法在FROM子句中为更新指定目标表'NAME'

我试图将此解决方案应用于MySQL DB中具有重复项的表中的数据.我得到这样的错误:

SQL Error [1093] [HY000]: You can't specify target table 'NAME' for update in FROM clause


DELETE NAME FROM NAME
WHERE NAME.id NOT IN
   (SELECT MIN(id) 
   FROM NAME GROUP BY col1, col2)
Run Code Online (Sandbox Code Playgroud)

也尝试过分配别名 - 但没有成功.这个错误的原因是什么?它通常指出SQL脚本可以产生循环过程,但在这里我实际上没有看到任何与此相关的 - 很明显,两个选择for DELETE和for SELECT是分离的 - 引擎必须SELECT 首先执行一次然后在WHERE条件中使用它DELETE.那么 - 为什么会发生这种错误,我怎样才能实际删除我的表格?=)

mysql sql

8
推荐指数
1
解决办法
1万
查看次数

MySQL使用count更新同一个表中的值

我想要做的是为每个患者设置其唯一的患者代码,该代码以1开头,而不是基于行ID.Id仅指定订单.像这样的东西:

patient_id  patient_code
    2           1
    3           2
    4           3
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

UPDATE patients p1
SET p1.patient_code = (
    SELECT COUNT( * ) 
    FROM patients p2
    WHERE p2.patient_id <= p1.patient_id 
)
Run Code Online (Sandbox Code Playgroud)

但这是错误:

#1093 - You can't specify target table 'p1' for update in FROM clause
Run Code Online (Sandbox Code Playgroud)

我找到了这个帖子:Mysql错误1093 - 无法在FROM子句中指定更新目标表.
但是我不知道如何应用已批准的答案来处理COUNT所需的子查询WHERE.

mysql sql subquery sql-update

7
推荐指数
1
解决办法
8179
查看次数

Doctrine Query Builder不使用UPDATE和INNER JOIN

在我的存储库中,我有这个查询:

$qb = $this->getEntityManager()->createQueryBuilder();
$qb
    ->update('MyBundle:Entity1', 'e1') 
    ->join('e1.Entity2', 'e2')
    ->set('e1.visibile', '1')
    ->andWhere('e2.id = :id')->setParameter("id", 123)
;
Run Code Online (Sandbox Code Playgroud)

抛出这个错误

[Semantical Error] line 0, col 66 near 'e2.id = :id': Error: 'e2' is not defined
Run Code Online (Sandbox Code Playgroud)

我检查了这种关系,这是正确的.在查询更新中使用join是否有任何问题?

database dql symfony doctrine-orm

7
推荐指数
4
解决办法
1万
查看次数

重命名sql中的重复数据

我能够使用此查询找出重复的数据

   SELECT names FROM group GROUP BY names HAVING count(*) > 1
Run Code Online (Sandbox Code Playgroud)

我能够获取重复数据.我只需要知道如何将这个重复数据重命名为new

  INPUT
+-----------------+               
| names           |
+-----------------+
| text1           |
| text2           |
| text3           |
| text1           |
| text3           |
| text4           |
+-----------------+

OUTPUT  
+-----------------+
| names           |
+-----------------+ 
| text1           |
| text2           |
| text3           |
| text1 new value |->RENAMED
| text3 new value |->RENAMED
| text4           |
+-----------------+
Run Code Online (Sandbox Code Playgroud)

mysql sql

6
推荐指数
1
解决办法
4187
查看次数

如何在没有连接的情况下编写JPA 2.1更新条件查询?

我正在使用JPA 2.1,Hibernate 4.3.6.Final和MySQL 5.5.37.我正在尝试使用CriteriaBuilder API编写将更新多行的更新查询.但是,当我尝试运行以下内容时,我收到"java.lang.IllegalArgumentException:UPDATE/DELETE条件查询无法定义连接"...

final CriteriaBuilder qb = m_entityManager.getCriteriaBuilder();
    final CriteriaUpdate<MyClassroom> q = qb.createCriteriaUpdate(MyClassroom.class);
    final Root<MyClassroom> root = q.from(MyClassroom.class);
    final Join<MyClassroom, MyClassroomUser> rosterJoin = root.join(MyClassroom_.roster);
    final Join<MyClassroomUser, User> userJoin = rosterJoin.join(MyClassroomUser_.user);

    final Calendar today = Calendar.getInstance();
    q.set(root.get(MyClassroom_.enabled), false)
     .where(qb.and(qb.equal(root.get(MyClassroom_.enabled),true),
                            qb.lessThanOrEqualTo(root.get(MyClassroom_.session).get(MyClassroomSession_.schedule).<Calendar>get(MyClassroomSchedule_.endDate), today)),
                            qb.equal(rosterJoin.get(MyClassroomUser_.classroomRole).get(ClassroomRole_.name), ClassroomRoles.TEACHER),
                            qb.equal(userJoin.get(User_.organization).get(Organization_.importDataFromSis), false));

    return m_entityManager.createQuery(q).executeUpdate();
Run Code Online (Sandbox Code Playgroud)

如果不使用JPQL,我可以用另一种方式编写查询,以便利用JPA 2.1更新多行吗?下面是异常的完整堆栈跟踪...

java.lang.IllegalArgumentException: UPDATE/DELETE criteria queries cannot define joins
    at org.hibernate.jpa.criteria.path.RootImpl.illegalJoin(RootImpl.java:81)
    at org.hibernate.jpa.criteria.path.AbstractFromImpl.join(AbstractFromImpl.java:330)
    at org.hibernate.jpa.criteria.path.AbstractFromImpl.join(AbstractFromImpl.java:324)
    at org.mainco.subco.classroom.repo.MyClassroomDaoImpl.disabledNonCleverExpiredClasses(MyClassroomDaoImpl.java:495)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa join updates jpa-2.1

6
推荐指数
1
解决办法
4857
查看次数

MySQL INSERT在同一个表上使用带有COUNT()的子查询

我无法INSERT正确执行查询,而且我似乎无法在Google或Stack Overflow上找到解决此特定问题的任何内容.

我正在尝试为特色条目创建一个简单的表,其中entry_id保存到表中以及它的当前顺序.

我想要的输出是这样的:

如果featured表当前有这三个条目:

featured_id    entry_id    featured_order
1              27          0
2              54          1
4              23          2
Run Code Online (Sandbox Code Playgroud)

我希望下一个条目以featured_order= 3 保存.

我试图让以下查询工作没有运气:

INSERT INTO `featured`
(
    `entry_id`, `featured_order`
)
VALUES
(
    200,
    (SELECT COUNT(*) AS `the_count` FROM `featured`)
)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:You can't specify target table 'featured' for update in FROM clause.

任何人都可以帮助获得计数而不会导致错误的解决方案吗?

提前致谢!

mysql insert mysql-error-1093

5
推荐指数
1
解决办法
1万
查看次数

为什么更新和选择两者不能使用相同的表

在这个查询中我想更新那些最新发布的记录.但是我的这个查询不起作用请帮帮我是什么原因???

错误: - 您无法在FROM子句中指定目标表'beevers_products'以进行更新

update beevers_products set product_name='my_product_name' where posted_date in (SELECT posted_date FROM `beevers_products` order by posted_date asc limit 1)
Run Code Online (Sandbox Code Playgroud)

php codeigniter

5
推荐指数
1
解决办法
143
查看次数

如果 count(*) &gt; n 更新行

我的数据库具有以下结构:

ID | text | time | valid
Run Code Online (Sandbox Code Playgroud)

这是我目前的代码。我试图找到一种方法来做到这一点作为一个查询。

rows = select * from table where ID=x order by time desc;
n=0;
foreach rows{
    if(n > 3){
       update table set valid = -1 where rows[n]; 
    }
    n++
}
Run Code Online (Sandbox Code Playgroud)

我正在检查给定 ID 存在多少行。然后我需要为 n > 3 的所有行设置 valid=-1;

有没有办法通过一个查询来做到这一点?

mysql sql insert sql-update

5
推荐指数
2
解决办法
8068
查看次数

MySQL的基本原理"无法在FROM子句中指定更新的目标表"

在MySQL中,如果我正在执行一个DELETE或UPDATE在同一个表上,我不能在谓词中重用表.例如,这是不可能的:

DELETE FROM story_category WHERE category_id NOT IN (
--          ^^^^^^^^^^^^^^ deleting from this table...

SELECT DISTINCT category.id FROM category 
       INNER JOIN story_category ON category_id=category.id);
--                ^^^^^^^^^^^^^^ ... prevents using the same table in predicates
Run Code Online (Sandbox Code Playgroud)

上面的例子来自这个Stack Overflow问题,其中接受的答案和许多其他答案指出,通过将子查询嵌套到另一个子查询中以使MySQL无法识别表重用,可以使用一种技巧:

DELETE FROM story_category
--          ^^^^^^^^^^^^^^
WHERE category_id NOT IN (
    SELECT cid FROM (
        SELECT DISTINCT category.id AS cid FROM category 
        INNER JOIN story_category ON category_id=category.id
--                 ^^^^^^^^^^^^^^ apparently no longer considered the same table
    ) AS …
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-update sql-delete

5
推荐指数
1
解决办法
256
查看次数

删除除一个以外的所有重复项

我们有一个表,business_users有user_id和business_id我们有重复.如何编写一个删除所有重复项的查询?

mysql sql

3
推荐指数
1
解决办法
3845
查看次数