2017-08-05 12 views
0

私はクライアントに署名したが、これらの要件を満たしている場合にのみ、albumテーブルにレコードを削除するSQLクエリを作成する必要があります。複雑な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 | last_name
  3. domains - id |所有者(fk-> clients)|名前
  4. clients_albums - client(fk-> clients)|アルバム(fk - >アルバム)
  5. domains_albums - domain(fk-> domains)|アルバム(FK - >アルバム)
+1

これまでに何か試しましたか? –

+0

@VojtěchDohnal - 私は質問に答えを加えました。 – Altaula

+0

英語を話すサイトですので、英語のみを使用してください。 –

答えて

3

私は、これはトリックを行うべきだと思う:

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

JOINに参加し、LEFT JOINに参加しない理由 – Altaula

+1

JOIN: "両方のテーブルで一致する値を持つレコードを返します。"対 LEFT JOIN: "左テーブルからすべてのレコードを返し、右テーブルから一致するレコードを返します"。あなたは今、左のテーブルからすべてのレコードをしたくないですか? – Cyril