复杂DELETE SQL查询

问题描述:

我需要一个SQL查询,将删除记录在album表,只有在客户签署的满足了这些要求:复杂DELETE SQL查询

// Variables as a demonstration 
const signedClientId = 1; 
const albumIdToDelete = 2; 

要求

  1. 客户clients_albums表中有关联相册
  2. ---- ----
  3. 影集存在于domains_albums表和客户端是域

的老板,我有5个表:

  1. 专辑 - ID |名称
  2. clients - id | first_name |姓氏
  3. domains - id |所有者(fk - >客户)|名称
  4. clients_albums - client(fk - > clients)|专辑(fk - >专辑)
  5. domains_albums - domain(fk - > domains)|专辑(FK - >专辑)
+1

你到目前为止尝试过什么吗? –

+0

@VojtěchDohnal - 我为问题添加了解决方案。 – Altaula

+0

这是一个讲英语的网站,所以请只使用英文。 –

我想这应该做的伎俩:

DELETE 
FROM albums 
WHERE album_id IN 
(SELECT album_id 
FROM clients_albums 
WHERE client_id = @CLIENTID) 
OR 
WHERE album_id IN 
(SELECT album_id 
FROM domain_albums JOIN domains ON domain_albums.album = albums.id 
WHERE domains.owner = @CLIENTID) 

@CLIENTID是一个占位符,你可以在任何一个查询系统使用客户端ID传递。

+0

为什么加入而不是加入? – Altaula

+1

JOIN:“返回两个表中具有匹配值的记录”vs LEFT JOIN:“从左表中返回所有记录,并从右表中返回匹配的记录”。你现在不想从左表中得到所有记录吗? – Cyril