1. 程式人生 > >mysql 的delete from 子查詢限制

mysql 的delete from 子查詢限制

1.使用mysql進行delete from操作時,若子查詢的 FROM 字句和更新/刪除物件使用同一張表,會出現錯誤。

mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 );
ERROR 1093 (HY000): You can’t specify target table ‘tab1′ for update in FROM clause

針對“同一張表”這個限制,撇開效率不談,多數情況下都可以通過多加一層select 別名表來變通解決,像這樣

DELETE FROM tab1
WHERE col1 = (
SELECT MAX( col1 )
FROM (
SELECT * FROM tab1
) AS t
);


------------------------------------------------------------------------

2. mysql delete from where in 時後面 的查詢語句裡不能加where條件


Sql程式碼
      delete from `t_goods` where fi_id in (select * from ( select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null) b) 


Sql程式碼
      delete from `t_goods` where fi_id in (select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null)  


Sql程式碼
      delete from `t_goods` where fi_id in ( select fi_id from `t_goods` )  

上面三種情況,只有中間的不能執行。

綜合起來就是mysql delete from where in 時後面 的查詢語句裡不能加where條件

---------------------------------------------------------------------------


3. delete from table... 這其中table不能使用別名

Sql程式碼

    delete from student a where a.id in (1,2);(執行失敗)

   

     select a.* from student a where a.id in (1,2);(執行成功)

相關推薦

mysqldelete from 查詢限制

1.使用mysql進行delete from操作時,若子查詢的 FROM 字句和更新/刪除物件使用同一張表,會出現錯誤。 mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 ); ERROR 1093 (HY000):

mysql update from 查詢

這個破問題糾結了我好久,查了mysql的好多資料,最後還是在別人那裡得到結果,特此記錄一下,留個備份吧! mssql 子查詢更新 update log set uin= b.uin from log a,logs b where a.accountuin = b.a

MySQLdelete where in 語句的查詢限制

場景一 delete from table1 where id = (select max(id) from table1 ); [Err] 1093 - You can’t specify target table 'table1 ’ for updat

MySQLdelete 語句的查詢限制

場景一 delete from student where id = (select max(id) from student); [Err] 1093 - You can't specify target table 'student' for update in FROM clause 描述

Mysql from 查詢問題? 隨筆

表結構 goods_id,goods_namefrom(*FROM`goods`WHERE1ORDERBYcat_idASC,goods_idDESC)astmpgroupbycat_id 上面的

mysql in型查詢陷阱

秒級 tab lai sql 一對一 語句 lec 掃描 主鍵 現在有兩個表,table1和table2,table1有1千萬數據(id 主鍵索引),table2有三條數據(uid字段 3,5,7); select * from table1 where id in

mysql 資料操作 查詢 帶EXISTS關鍵字的查詢

  帶EXISTS關鍵字的子查詢   EXISTS關字鍵字表示存在。   EXISTS 判斷某個sql語句的有沒有查到結果 有就返回真  true 否則返回假 False 如果條件成立 返回另外一條sql語句的返回結果   返回結果了 &nb

mysql 資料操作 查詢 帶比較運算子的查詢

    帶比較運算子的子查詢   #比較運算子:=、!=、>、>=、<、<=、<> #查詢大於所有人平均年齡的員工名與年齡思路 先拿到所有人的平均年齡然後 再用另外一條sql語句 進行比較 拿所有員工的年齡 > 所有人的平均年齡

mysql update where查詢實現方式

mysql的update的一些特點 1、更新的表不能在set和where中子查詢; 2、可以對多個表進行更新(sqlserver不行);   如:update ta a,tb b set a.Bid=b.id ,b.Aid=a.id;   3、update 後面可

對於MySQL中的查詢的理解

每天記錄一下自己的心得體會,今天寫一下MySQL中的子查詢,個人感覺子查詢的難度比之前學的查詢都比較難,可能是語句太多吧,對於初學者的難度會有一點,反正我第一次接觸的時候是崩潰的,因為·程式碼有點多,因為內容比較多,所以小弟要是有講的不到位的,希望各位在下面給出

MYSQL多表查詢練習

CREATE TABLE emp( ​ empno INT, ​ ename VARCHAR(50), ​ job VARCHAR(50), ​ mgr INT, ​ hiredate DATE, ​ sal DECIMAL(7,2), ​ comm DECIM

MYSQL學習之查詢(表連線查詢)以及許可權控制

在上一篇部落格裡我們詳細的介紹了MySQL語言的DDL(資料定義語言) 和 DML(資料操作語言),那麼在這篇部落格中我們要對上次的DML進行補充;同時我們要介紹DCL(資料控制語言); 子查詢 在學習子查詢的開始我們由這樣一個問題來引出; 我們現在有一張員工表emp,該表中包含

mysql 批量更新查詢

報錯的sql : UPDATE pro_t_info as p SET Pro_Code = concat(Pro_Code,Pro_ID) WHERE Pro_ID in(  select Pro_ID from pro_t_info where  channel_sou

MySQL-SQL基礎-查詢

#子查詢-某些情況下,當進行查詢的時候,需要的條件是另外一個select語句的結果,這個時候就要用到子查詢。用於子查詢的關鍵字主要包括:in、not in、=、!=、exists、not exists等等。#從emp表中查詢出所有部門在dept表中的所有記錄mysql> select *

Mysql中exists查詢語句的使用,取出每組中最高的前n名的資訊

一、準備測試的表和資料 create table cat( id int not null auto_increment primary key, cat_id int, value int,

mysql關聯、查詢索引優化

img mysq str 子查詢 exist exists 關聯 not null 1、驅動表:加索引不起作用,因為全表掃描。表1 left join 表2 ,此時表1是驅動表  被驅動表:給這個加索引。 關聯查詢 子查詢時   盡量不使用not in 或者not e

mysql】關於查詢的一個例子

假設表my_tbl包含三個欄位a,b,c;現在需要查詢表中列a的每個不同值下的列b為最小值的記錄量。 比如表記錄為: a  b  c 1  3  'cd' 2  3  'nhd' 1  5  'bg

MySQL EXPLAIN 獨立查詢dependent subquery 優化示例

(本例建立表指令碼在文章底部) 對於mysql的出現的子查詢語句,大部分都是不太好的,尤其 in() 的子查詢語句,如下: select * from test.tabname where id in(select id from test.tabname2 where

MySQL不支援查詢裡有limit解決辦法

這樣的語句是不能正確執行的。select * from table where id in (select id from table limit 10);但是,只要你再來一層就行。。如:select * from table where id in (select t.id

mysql 複雜sql查詢的例項

在我們的實際專案中,有時候需要寫一下資料彙總和查詢,哪麼子查詢就必不可少。 比如我現在有三張表: lch_resource_attribute,idx_lch_resource_category,lch_resource_games 那麼我現在要查詢某個應用的子分類的話,用