我试图将此解决方案应用于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.那么 - 为什么会发生这种错误,我怎样才能实际删除我的表格?=)
我想要做的是为每个患者设置其唯一的患者代码,该代码以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.
在我的存储库中,我有这个查询:
$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是否有任何问题?
我能够使用此查询找出重复的数据
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) 我正在使用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) 我无法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.
任何人都可以帮助获得计数而不会导致错误的解决方案吗?
提前致谢!
在这个查询中我想更新那些最新发布的记录.但是我的这个查询不起作用请帮帮我是什么原因???
错误: - 您无法在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) 我的数据库具有以下结构:
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中,如果我正在执行一个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) 我们有一个表,business_users有user_id和business_id我们有重复.如何编写一个删除所有重复项的查询?
mysql ×7
sql ×6
sql-update ×3
insert ×2
codeigniter ×1
database ×1
doctrine-orm ×1
dql ×1
hibernate ×1
join ×1
jpa ×1
jpa-2.1 ×1
php ×1
sql-delete ×1
subquery ×1
symfony ×1
updates ×1