SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.11.2017 11:45:12

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Декартово произведение ?

Добрый день!

Предположим, имеется таблица table1 с данными и таблица table2 без данных.
Выполняем простейший запрос и видим, что выборка пустая.
Если во вторую таблицу добавить хотя бы 1 строчку, то выборка уже с данными.


SELECT table1.id
FROM table1 t1, table2 t2
WHERE...
 

(в выражении WHERE  задействованы условия для обеих таблиц)

Насколько я понял, для правильной работы запроса необходимо, иметь данные в обеих таблицах.

Если это так называемое "Декартово произведение", то стало быть, число от первой табл. умножается на нуль строк второй табл. и получается нуль - логично.

Вопрос: Как составить SQL запрос, чтобы даже, если во второй табл. нет данных, то результат выборки был с данными ?


Заранее спасибо!

Жду Вашего ответа.

Неактивен

 

#2 29.11.2017 11:53:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Декартово произведение ?

запятая это анаог inner join
вам вероятно нужен left join
см https://sqlinfo.ru/forum/viewtopic.php?id=3210

Неактивен

 

#3 29.11.2017 13:30:38

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Re: Декартово произведение ?

Архат, спасибо за ответ.
Да,  стало полегче с LEFT JOIN, но всё равно, как планировалось не заработало из-за последнего условия вида:

AND (t1.id != t2.`eid` OR t2.`sent` = 0)
, т.е. выборка пустая, если во второй таблице пусто.

Пришлось использовать для выборки всего лишь 1 таблицу и это условие проверять подзапросом. smile

Отредактированно warma2d (29.11.2017 13:31:28)

Неактивен

 

#4 29.11.2017 15:00:22

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Декартово произведение ?

SELECT table1.id
FROM table1 t1
 LEFT JOIN table2 t2 ON t1.id != t2.`eid` OR t2.`sent` = 0

Но выражение "OR t2.`sent` = 0" у меня вызывает непонимание. Скорее всего тут есть ошибка.

Отредактированно klow (29.11.2017 15:03:02)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson