Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Выборка из двух таблиц по нескольким условиям  [new]
Russ86
Member

Откуда:
Сообщений: 12
Здравствуйте, помогите, пожалуйста, с запросом

Имеются две таблицы:
table1 со столбцами product_id и lower_limit
table2 со столбцами product_id и variant_id

Условия следующие:
lower_limit > 1
variant_id = 102, 14211 и 25901

Нужно вывести строки из table1.
2 ноя 20, 13:06    [22224766]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
paver
Member

Откуда: Томск
Сообщений: 221
Russ86, свой вариант покажете? Про JOIN читали?
2 ноя 20, 15:20    [22224977]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Russ86
Member

Откуда:
Сообщений: 12
paver,

Да, сейчас как раз изучаю. Пока не составил свой вариант.
Мне в итоге данные строки нужно будет удалить из table1.
2 ноя 20, 16:14    [22225054]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Russ86
Member

Откуда:
Сообщений: 12
Пока такой запрос составил, но не работает, как хотелось бы:
SELECT * FROM table1
	WHERE table1.lower_limit > 1
		AND
		EXISTS
		(SELECT *
			FROM table2
				WHERE table2.product_id = table1.product_id
				AND table2.variant_id IN (102, 14211, 25901));
3 ноя 20, 08:44    [22225470]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Russ86
Member

Откуда:
Сообщений: 12
Так, вроде составил корректный запрос, который удаляет строки из table1 по условиям из двух таблиц.

DELETE table1 FROM table1 JOIN table2
	on table1.product_id = table2.product_id
		WHERE lower_limit > 1 AND variant_id IN (102, 14211, 25901);

Не подскажите, как-то можно увидеть строки, которые удаляются? Phpmyadmin показывает только количество удаленных строк.
3 ноя 20, 10:16    [22225510]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Russ86
вроде составил корректный запрос
Нет. Если в запросе используется более одного источника данных, то КАЖДОЕ имя поля должно иметь компоненту алиаса таблицы.

Russ86
как-то можно увидеть строки, которые удаляются?
Выполнить комплементарный SELECT. Само собой, до удаления...
3 ноя 20, 12:27    [22225583]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Russ86
Member

Откуда:
Сообщений: 12
Akina, спасибо за помощь,

Akina
Нет. Если в запросе используется более одного источника данных, то КАЖДОЕ имя поля должно иметь компоненту алиаса таблицы.

Имеете ввиду так сделать, работает также:
DELETE table1 FROM table1 JOIN table2
	on table1.product_id = table2.product_id
		WHERE table1.lower_limit > 1 AND table2.variant_id IN (102, 14211, 25901);


Akina
Выполнить комплементарный SELECT. Само собой, до удаления...

Делаю такой SELECT, количество показанных строк с удаленными совпадает. Это корректно?
SELECT * FROM table1 JOIN table2
	on table1.product_id = table2.product_id
		WHERE table1.lower_limit > 1 AND table2.variant_id IN (102, 14211, 25901);
3 ноя 20, 13:14    [22225628]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Russ86
Это корректно?
Формально - нет.
SELECT может выводить дубликаты, а вот удалить два раза одну запись не получится. Добавьте DISTINCT.
3 ноя 20, 13:25    [22225641]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Russ86
Имеете ввиду так сделать, работает также
Ясен пень что так же.

Это - правило. Хотите - нарушайте и пишите без алиасов. Все проблемы - за Ваш счёт.

Например, в будущем меняется структура одной из таблиц, и в неё добавляется поле, чисто случайно с тем же именем, что и в первой таблице. А Вы потом получаете по полной программе за то, что из-за вполне легитимного изменения программный комплекс лёг - и не потому, что изменяющий не посмотрел (хотя и он виноват), а потому, что Вы в своё время поленились.
3 ноя 20, 13:28    [22225646]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Russ86
Member

Откуда:
Сообщений: 12
Akina,

Согласен, что писать лучше по правилам. Просто такой пример нагуглился, я и взял его за основу.

Тем не менее, не понял, какие тут могут быть риски, ведь я же явно указываю в какой таблице делать DELETE и с какими таблицами делать JOIN. Если только поля в используемых таблицах станут с одинаковыми названиями, тогда возможны проблемы.
3 ноя 20, 13:45    [22225661]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из двух таблиц по нескольким условиям  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3399
Akina,

оно просто вывалится с ошибкой "хде мои алиасы?" и только. Поднимается добавлением оных, в т.ч. с применением grep + regexp. :)
4 ноя 20, 12:33    [22226188]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить