Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите понять плз / 12 сообщений из 12, страница 1 из 1
24.11.2015, 23:18:34
    #39112733
MysqlHelp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
ну что-то совсем крыша поехала, всегда считал если я делаю JOIN на какрой-то тэйбл то больше таблицы куда я джоинаю записей не может быть, но я оказался не прав, вот пример:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE test1 (num INT(2), name CHAR(10));
CREATE TABLE test2 (num INT(2), name CHAR(10));
INSERT INTO test1 VALUES (1,'John'),(2,'Rob'),(3,'Anton'),(5,'Alex'),(6,'Vera');
INSERT INTO test1 VALUES (3,'Mon'),(4,'Bob'),(5,'Tom'),(2,'Seva'),(2,'Mina');
INSERT INTO test2 VALUES (5,'John'),(6,'Rob'),(3,'Anton'),(4,'Alex'),(1,'Vera');
INSERT INTO test2 VALUES (25,'John'),(16,'Rob'),(13,'Anton'),(14,'Alex'),(11,'Vera');
INSERT INTO test2 VALUES (2,'Mon'),(3,'Bob'),(4,'Tom'),(2,'Seva'),(3,'Mina');


SELECT count(*) FROM test1;


SELECT t1.name,t1.num,t2.name,t2.num
FROM test1 t1
JOIN test2 t2 ON t1.num = t2.num;

SELECT t1.name
FROM test1 t1,test2 t2 
WHERE t1.`num` = t2.`num`;



Всего записей на выходе 18, хотя я всегда считал что должно быть не более 10. кол-во в первой таблице, помогите понять как это происходит и как мне получить записей не более чем в таблице 1, только проверив есть ли в другой таблице такие num?
...
Рейтинг: 0 / 0
24.11.2015, 23:42:56
    #39112745
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
MysqlHelp,

Все там четко, правильно все майсиквел показал. Подумай почему
...
Рейтинг: 0 / 0
24.11.2015, 23:47:28
    #39112748
MysqlHelp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
MikkiMouseMysqlHelp,

Все там четко, правильно все майсиквел показал. Подумай почему

миккимаус из киева, если я бы я понял то наверное бы не спрашивал, а если нет нормального ответа, то наверное не стоит флудить в ветке, подумай почему?
...
Рейтинг: 0 / 0
25.11.2015, 00:02:53
    #39112752
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
Ты и не мог понять. Прежде чем спрашивать - надо было хотя бы посмотреть на выбираемые записи. И попробовать понять, почему некоторые записи дублируются. И почему именно столько раз.
...
Рейтинг: 0 / 0
25.11.2015, 00:04:09
    #39112753
alexnews
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
MysqlHelp,

У тебя не уникальные ключи для JOIN.
...
Рейтинг: 0 / 0
25.11.2015, 00:07:50
    #39112756
MysqlHelp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
Akina,

Согласен, но я же делаю JOIN, то есть в моем понятии таблица1 является исходником и к ней добавляются данные из таблицы2 и не зависимо от уникально или нет MySQL должен был только добавить записи из другоей таблицы...
...
Рейтинг: 0 / 0
25.11.2015, 00:09:31
    #39112757
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
MysqlHelp,

Ну вот смотри на пальцах (так детям объясняют):
в твоем запросе используется JOIN - объединение таблиц по какому-либо условию
условие ты пишешь t1.num = t2.num
Соответственно проходимся по всей левой табличке, ищем соответствия в правой и записываем сколько их

1) t1.num = 1 (1 запись * на 1 запись в табличке t2) = 1;
2) t1.num = 2 (3 записи * на 2 записи в табличке t2) = 6;
3) t1.num = 3 (2 записи * на 3 записи в табличке t2) = 6;
4) t1.num = 4 (1 запись * на 2 записи в табличке t2) = 2;
5) t1.num = 5 (2 записи * на 1 запись в табличке t2) = 2;
6) t1.num = 6 (1 запись * на 1 запись в табличке t2) = 1;

В сумме получаем аккурат 18 записей в результирующем наборе.
Понятно тебе так?
...
Рейтинг: 0 / 0
25.11.2015, 00:17:06
    #39112761
MysqlHelp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
MikkiMouse,

Да, спасибо Микки, Акина уже объяснил, только вопрос другого направления: а могу ли я сделать JOIN на t1 чтобы в результате у меня осталось тоже кол-во записей или меньше, но я знал что эта запись точно существует в другой таблице?
...
Рейтинг: 0 / 0
25.11.2015, 00:36:46
    #39112767
alexnews
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
MysqlHelp,

Код: sql
1.
2.
3.
4.
SELECT t1.`name`,t1.num,t2.num
FROM test1 t1
LEFT JOIN (SELECT num,count(num) FROM test2 GROUP BY num) t2 ON t1.num = t2.num
WHERE t2.num IS NOT NULL;



На сколько я представляю что-то типа такого.
...
Рейтинг: 0 / 0
25.11.2015, 00:46:34
    #39112771
alexnews
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
alexnews,

Извиняюсь воткнул LEFT JOIN, можно просто JOIN без WHERE
...
Рейтинг: 0 / 0
25.11.2015, 08:54:54
    #39112817
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
MysqlHelpмогу ли я сделать JOIN на t1 чтобы в результате у меня осталось тоже кол-во записей или меньше, но я знал что эта запись точно существует в другой таблице?
Для этого необходимо наличие (в структуре или вычисленных динамически) уникальных для записи конструкций - это может быть первичный индекс или, например, считаемая в запросе нумерация записей.
...
Рейтинг: 0 / 0
25.11.2015, 11:04:42
    #39112922
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите понять плз
MysqlHelpAkina,

Согласен, но я же делаю JOIN, то есть в моем понятии таблица1 является исходником и к ней добавляются данные из таблицы2 и не зависимо от уникально или нет MySQL должен был только добавить записи из другоей таблицы...

ну, он и ДОБАВЛЯЕТ записи, все верно...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите понять плз / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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