Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / join пустой таблицы если другие условия сопадают / 6 сообщений из 6, страница 1 из 1
13.04.2016, 15:27
    #39214761
ezd
ezd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join пустой таблицы если другие условия сопадают
Здравствуйте.

Не подскажете как сделать join второй таблицы и искать в ней, при том что она может быть пуста?

На сколько я понимаю LEFT JOIN будет возвращать любой результат, не знаю, можно ли его тут применить.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE IF NOT EXISTS `t1` (
  `t1_id` int(10) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `t1` (`t1_id`) VALUES
(1);

CREATE TABLE IF NOT EXISTS `t2` (
  `t2_ids` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Нужно получить примерно такое

Код: plaintext
SELECT t1.* FROM t1,t2 WHERE t1_id=1 OR FIND_IN_SET(t1_id,t2_ids)

То есть задача найти совпадение в t1 или указание на правильную запись в таблице t2. Но если таблица t2 пустая, то база не возвращает вообще ничего, даже если другие элементы WHERE являются TRUE.

А если добавить

Код: plaintext
INSERT INTO `t2` (`t2_ids`) VALUES ('2,3');

то база возвращает строку.

Как сделать чтобы работало с пустой таблицей? Но обязательно чтобы
t1_id=1 - было TRUE или FIND_IN_SET(t1_id,t2_ids) было TRUE
...
Рейтинг: 0 / 0
13.04.2016, 16:14
    #39214808
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join пустой таблицы если другие условия сопадают
ezd,

LEFT JOIN
...
Рейтинг: 0 / 0
13.04.2016, 16:37
    #39214851
ezd
ezd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join пустой таблицы если другие условия сопадают
MasterZiv,

И как оно будет выглядеть в итоге?

Код: plaintext
1.
2.
3.
SELECT t1.* FROM t1
LEFT JOIN t2 ON (FIND_IN_SET(2,t2_ids))
WHERE t1_id=100

Не дает ничего.
...
Рейтинг: 0 / 0
13.04.2016, 17:26
    #39214933
ezd
ezd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join пустой таблицы если другие условия сопадают
Методом тыка составил такое:

Код: plaintext
1.
2.
3.
4.
5.
INSERT INTO `t1` ( `t1_id` ) VALUES ( 2 ) ;

SELECT *
FROM t1
LEFT JOIN t2 ON (TRUE)
WHERE t1_id=100 OR FIND_IN_SET( t1_id, t2_ids )

Такая конструкция LEFT JOIN t2 ON (TRUE) вообще имеет право на существование? Какие подводные камни могут быть?
...
Рейтинг: 0 / 0
13.04.2016, 17:56
    #39214993
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join пустой таблицы если другие условия сопадают
ezdТакая конструкция LEFT JOIN t2 ON (TRUE) вообще имеет право на существование?
Ну... да. Можно было ON вообще не писАть, его отсутствие не криминал.
Вот только в итоге получился-то INNER JOIN...
...
Рейтинг: 0 / 0
13.04.2016, 19:00
    #39215069
ezd
ezd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join пустой таблицы если другие условия сопадают
Akina,

Да вот меня это и беспокоило, что именно INNER, но тогда с пустой таблицей не находит совпадений вообще. И без "ON", кстати, не работает, выдает ошибку (по крайней мере в моей версии мускула).
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / join пустой таблицы если другие условия сопадают / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]