2015-01-08 5 views
0

У меня есть 2 таблицыЗапись вложенных запросов SQL

Table1

ID Name 
-------------------- 
1 John Carter 
2 Jack Hammer 
3 John Adams 
4 John Doe 
5 Brian Adams 

Table2

ID  ID_FromTable1 
----------------------------- 
1  2 
2  3 
3  1 
4  1 
5  1 
6  2 
7  3 
8  1 
9  1 
10  5 
11  4 
12  5 
13  4 

ID в обеих таблицах является первичным ключом

  • ID_FromTable1 является иностранным ключом, указывающим на ID of Table1.

Теперь я сделать что-то вроде этого:

SELECT ID 
FROM Table1 
WHERE Name like '%John%' 

Это даст мне ID s 1, 3, 4.

Теперь с помощью этих ID с, я хочу написать запрос на Table2 удалить все записи, где ID_FromTable1 являются 1, 3, 4.

Пожалуйста, помогите мне написать один единственный запрос SQL, чтобы получить все ID с от Table1, где зовут 'John', а затем с помощью этих ID с для удаления записей из Table2.

Надеюсь, я поставил вопрос ясно. Дайте мне знать, если вам нужно какое-либо разъяснение.

+1

Если вы разместите код, XML или данные образцы, *** ПОЖАЛУЙСТА *** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! Не нужно для всех этих беспорядочных ' ' и '
' тегов, в этом случае !! –

+3

Какие СУБД вы используете? – potashin

+0

@marc_s Спасибо за информацию. Я буду помнить со следующего раза. –

ответ

3

Вы можете использовать IN с подзапроса:

DELETE FROM Table2 
WHERE ID_FromTable1 IN (SELECT ID 
         FROM Table1 
         WHERE Name LIKE '%John%') 
+0

Большое спасибо за ответ. Это сработало для меня. Я зациклился на синтаксисе и постоянно получал некоторые ошибки. –

1

В MySQL вы можете сделать это с этим присоединиться

delete table2 
from table2 
join table1 on table2.id_fromtable1 = table1.id 
WHERE t1.Name like '%John%' 
+3

Это нестандартный SQL. Вы должны добавить СУБД, на котором это будет работать (вопрос не помечен конкретной СУБД) –

Смежные вопросы