MySQL將查詢的結果作為update更新的數據,且在原字段數據后 CONCAT拼接(lej)


update user INNER JOIN 
(SELECT GROUP_CONCAT('',id)AS app_id_str  FROM `app` WHERE `admin_id` = '用戶B的id' AND `status` > '0' AND `is_deleted` = '0' LIMIT 0,1000 ) app_id_strs 
set app_id= CONCAT(app_id,',',app_id_str) WHERE uid=用戶A的id;

釋義:

1.查詢app表中狀態大於0,未刪除,且admin_id=用戶Bid 用戶的所有主鍵id,並用(,)逗號 拼接成字符串別名 app_id_strs ;

(SELECT GROUP_CONCAT('',id)AS app_id_str  FROM `app` WHERE `admin_id` = '用戶B的id' AND `status` > '0' AND `is_deleted` = '0' LIMIT 0,1000 ) app_id_strs 

2.更新用戶A 的app_id, 在A用戶原有的app_id 后,用CONCAT,拼接上查詢出來的app_id_strs,並在兩者之間用(,)逗號連接

擴展:

二、mysql中update和select結合使用

在遇到需要update設置的參數來自從其他表select出的結果時,需要把update和select結合使用,不同數據庫支持的形式不一樣,在mysql中如下:

update A inner join(select id,name from B) c on A.id = c.id set A.name = c.name;

根據AB兩個表的id相同為條件,把A表的name修改為B的sql語句就如上所示

三、update 和 select 結合使用進行數據更新,案例 

現有兩張表 inspect_danger 和 company 表,根據 company 表的 ID 和 inspect_danger 表的COMPANY_ID 匹配,把 company 表內的 INDUSTRY 更新到 inspect_danger表中。

UPDATE inspect_danger ins
LEFT JOIN (
    SELECT 
    com.ID,com.INDUSTRY,ip.ID insId
    FROM company com
    INNER JOIN  inspect_danger ip
    ON ip.COMPANY_ID = com.ID
    GROUP BY com.ID
) c 
ON ins.ID = c.insId
SET ins.COMPANY_INDUSTRY = c.INDUSTRY

四、做SQL查詢時會經常需要,把查詢的結果拼接成一個字符串。

解決方法: 通過 group_concat 函數

1.正常查詢 如下: 

select id result from ctp_enum_item limit 100;

2.拼接結果 如下

  select group_concat("'",id,"'") result from ctp_enum_item limit 100; 

3.因為拼接的結果很長,導致拼接結果顯示不全,可以通過以下方法解決。  在每次查詢前執行,使得查詢結果值變大。

SET SESSION group_concat_max_len = 10240;
或者
SET GLOBAL group_concat_max_len = 10240; 

4.補充:SQL server 的 拼接SQL如下:

select stuff((
select ','+ requestid
from nccombinedpayment for xml path('')),1,1,'') as requestid ;

五、mysql 對查詢出來的字段拼接字符串 concat

SELECT item_starttime,item_username,CONCAT('外出',item_wcaddress) as item_wcaddress,author from tlk_KQ_goout_app;

拼接之前

拼接之后

  六、淺析MySQL中concat以及group_concat的使用

七、mysql 往表中某個字段的字符串后追加字符串

update 表名 set 字段名=CONCAT(字段名,"需添加的值")WHERE 條件;

例如:

update np_order set customer_remark=CONCAT(customer_remark,"需添加的值")WHERE order_id='1'

np_order :表名

customer_remark  字段名稱

where  后指定條件

八、mysql 把select結果update更新到表中,從查詢結果中更新數據

邏輯:兩張表連接獲取finishin的重量插入到sale.

UPDATE sale
INNER JOIN (
	SELECT
		sale.FNo,
		sale.FEntryID,
		(finishin.FQty) AS qty
	FROM
		sale,
		finishin
	WHERE
		sale.FNo = finishin.FNo
	AND sale.FEntryID = finishin.FEntryID
	ORDER BY
		sale.FNo
) sale2 ON sale2.FNo = sale.FNo
AND sale2.FEntryID = sale.FEntryID
SET sale.FqtyIn = sale2.qty

邏輯:timefinishin表中有多個相同的FBillNo,FEntryID一樣的數據,通過分組來求和qty總重量,成為一張新的表和salesorderinfo進行連表

UPDATE salesorderinfo
INNER JOIN (
	SELECT
		salesorderinfo.FBillNo,
		salesorderinfo.FEntryID,
		(timein.FqtyIn) AS qty
	FROM
		salesorderinfo,
		(
			SELECT
				*, SUM(timefinishin.FQty) AS FqtyIn
			FROM
				timefinishin
			GROUP BY
				FBillNo,
				FEntryID
		) timein
	WHERE
		salesorderinfo.FBillNo = timein.FBillNo
	AND salesorderinfo.FEntryID = timein.FEntryID
) sale2 ON sale2.FBillNo = salesorderinfo.FBillNo
AND sale2.FEntryID = salesorderinfo.FEntryID
SET salesorderinfo.FqtyIn = sale2.qty

發現好東西,https://httpbin.org/ 這個網站可以用來測試 http 請求
參考:

https://blog.csdn.net/qq_36823916/article/details/79403696

https://blog.csdn.net/qq5621/article/details/108098826

https://blog.csdn.net/cydbetter/article/details/82117841

https://blog.csdn.net/mary19920410/article/details/76545053


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM