簡體   English   中英

使用選擇和多個聯接的SQL更新表

[英]SQL update table using select from and multiple joins

這是我表格的相關列

  • bia_panelsid, sign_id, value, project_id

  • bia_clientsid, name

  • bia_projectsid, name, client_id, city_id

  • bia_citiesid, name

我試圖更新bia_panels.project_idbia_projects.id其中bia_panels.value = bia_clients.namepanels.project_id =000 ,值不為空,當然我必須使用多個連接到那里

    -- UPDATE
SELECT * FROM
`bia_panels` AS t1
    JOIN  bia_clients AS t2 
        ON t1.value = t2.name 
    JOIN bia_projects AS  t3 
        ON t2.id = t3.client_id 


-- SET t1.project_id = t3.id

-- WHERE t1.value<>'' AND t1.project_id = '000' 
WHERE t1.value <>''

問題是,這不能給我正確的結果(我的項目ID在聯接中某處不正確,會返回多個結果,因此它們會中斷

我知道一旦能夠正確選擇部分,就可以使用更新

例如,可能有多個面板,其中value=client.name但並非所有面板都是相同的項目ID

和bia_panels.ID = bia_panels.project_id

您的選擇查詢中缺少聯接條件,應像這樣添加

 JOIN bia_projects ON bia_clients.id = bia_projects.client_id  and bia_panels.ID = bia_panels.project_id

以下查詢應給出正確的輸出

SELECT  sign_id, value, left(sign_id, 3) AS city_ID  ,  
bia_clients.id AS 'client id',  bia_projects.id AS proj_id , bia_cities.id
FROM bia_panels
 JOIN  bia_clients ON bia_panels.value = bia_clients.name 
 JOIN bia_projects ON bia_clients.id = bia_projects.client_id  and bia_panels.ID = bia_panels.project_id
JOIN bia_cities ON bia_projects.city_id = bia_cities.id WHERE bia_panels.value<>'' AND bia_panels.project_id = '000' ORDER BY value

我將把您的查詢重新組織成UPDATE查詢:

UPDATE bia_panels p, bia_clients c, bia_projects t
  SET p.project_id=t.id
  WHERE p.value=c.name
    AND t.client_id=c.id
    AND p.project_id=''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM