Текущий архив: 2009.04.05;
Скачать: CL | DM;
Вниз
Помогите с запросом с присоединением (MySQL) Найти похожие ветки
← →
Dmitry S © (2008-07-31 18:50) [0]Есть таблица
item с полями (id, code),
если таблицаprop с полями (id, item_id, name, value),
Каждой записи в таблице item соответствует множество записей в таблице prop.
Необходимо выбрать записи из таблицы item и к каждой записи присоединить какую-нибудь (любую) одну запись из таблицы prop.
К примеру таблица item:
id code
1 "somecode1"
2 "somecode2"
Таблица prop
id item_id name value
1 1 "somename1" "somevalue"
2 1 "somename2" "somevalue"
3 1 "somename3" "somevalue"
4 2 "somename4" "somevalue"
5 2 "somename5" "somevalue"
И запрос:
SELECT item.id, prop.id, prop.name FROM item LEFT JOIN prop ON prop.item_id=item.id WHERE item.id IN (1,2)
Запрос возвращает пять строк:
1 1 somename1
1 2 somename2
1 3 somename3
2 4 somename4
2 5 somename5
А надо, чтобы запрос вернул только две строки, к примеру:
1 1 somename1
1 3 somename3
Какую именно строку выберит MySQL из таблица prop не имеет значения.
Что надо изменить в запросе?
← →
Dmitry S © (2008-07-31 18:51) [1]Опечатка, правильно так:
А надо, чтобы запрос вернул только две строки, к примеру:
1 1 somename1
2 3 somename3
← →
Dmitry S © (2008-07-31 19:35) [2]Пока сделал так:
SELECT item.id, p.id, p.name
FROM item
LEFT JOIN (SELECT * FROM prop GROUP BY `item_id`) AS p
ON p.item_id=item.id
WHERE item.id IN (1,2)
Оцените вариант. В таблице prop существует индекс по полю item_id
← →
sniknik © (2008-07-31 20:01) [3]
SELECT i.id, p.id, p.name
FROM item AS i
INNER JOIN prop AS p ON i.id=ip.id
← →
sniknik © (2008-07-31 20:02) [4]опечатка
SELECT i.id, p.id, p.name
FROM item AS i
INNER JOIN prop AS p ON i.id=p.id
← →
Правильный$Вася (2008-07-31 20:08) [5]
> Необходимо выбрать записи из таблицы item и к каждой записи
> присоединить какую-нибудь (любую) одну запись из таблицы prop.
довольно странная задача
пояснишь?
← →
Johnmen © (2008-07-31 21:02) [6]
SELECT i.id, MIN(p.id), MAX(p.name)
FROM item AS i
INNER JOIN prop AS p ON i.id=p.item_id
GROUP BY i.id
PS
из исходных данных [0] результат [1] в принципе неполучаем
:)
← →
sniknik © (2008-07-31 21:28) [7]> в принципе неполучаем
получаем, т.к. есть приписка
> Какую именно строку выберит MySQL из таблица prop не имеет значения.
вот это
> 3 somename3
из таблици prop.
т.что sniknik © (31.07.08 20:02) [4] вполне подойдет.
твое нет, т.к. у тебя данные могут быть из разных строк prop-а, а говорилось только про одну но любую.
← →
Johnmen © (2008-07-31 21:35) [8]
> sniknik © (31.07.08 21:28) [7]
> > в принципе неполучаем
> получаем, т.к. есть приписка
> Какую именно строку выберит MySQL из таблица prop не имеет значения.
вот это
> 3 somename3
из таблици prop.
Но эта запись не присоединяется к 2запросом [4]
> т.что sniknik © (31.07.08 20:02) [4] вполне подойдет.твое
> нет, т.к. у тебя данные могут быть из разных строк prop-
> а, а говорилось только про одну но любую.
Да-да, про вообще любую недоглядел...:)))
← →
Нат (2008-08-01 00:57) [9]Полная неопределенность выбора ... зачем тогда присоединять?
Надо как-то конкретизировать, по какому правилу выбирать...
Всегда первую или последнюю, или с масимальным значением, медиану или по случайному закону...
А совсем любую, это значит - на Ваше усмотрение, или советчика. Вот и выберите правило, наиболее удобное для Вас, если в задаче оно не указано.
Что будет для Вас "выбрать любую"?
← →
Anatoly Podgoretsky © (2008-08-01 09:49) [10]Не возможно, prop.id = 3 не существует.
← →
Dmitry S © (2008-08-01 10:10) [11]Моя ошибка - надо было сразу выдать реальную задачу.
Есть таблица, к примеру, новостей (item). У каждой новости могут быть фотографии (prop), сколько угодно.
Нужно выбрать список новостей, и к каждой новости выбрать одну (любую) из ее фотографий.
← →
ЮЮ © (2008-08-01 10:16) [12]> Нужно выбрать список новостей, и к каждой новости выбрать
> одну (любую) из ее фотографий.
Заменю (любую) в своем ТЗ на (первую, c наименьшим Id), (последнююю), ...
Сам сначала определись, прежде чем сервер терзать.
← →
Dmitry S © (2008-08-01 10:36) [13]
> Заменю (любую) в своем ТЗ на (первую, c наименьшим Id),
> (последнююю), ...
> Сам сначала определись, прежде чем сервер терзать.
>
Зачем лишний раз нагружать сервер. Пусть выберет ту, которую ему удобнее (например, первую в таблице).
← →
Sergey13 © (2008-08-01 10:59) [14]> [13] Dmitry S © (01.08.08 10:36)
> например, первую в таблице
Это которую?
> которую ему удобнее
А если несколько одинаково удобно.
Он железяка тупая - он думать не может. И ошибаются те, кто думает, что он думает.
← →
Dmitry S © (2008-08-01 11:22) [15]
> Он железяка тупая - он думать не может. И ошибаются те,
> кто думает, что он думает.
Однако понять, иносказательно выражаясь, на что потребуется меньше времени она может!
← →
Sergey13 © (2008-08-01 11:37) [16]> [15] Dmitry S © (01.08.08 11:22)
> Однако понять, иносказательно выражаясь, на что потребуется
> меньше времени она может!
Ты предлагаешь ей проанализировать ВСЕ варианты и выбрать оптимальный? Может проще самому сформулировать ЧЕТКОЕ условие, чем предлагать серверу смотреть на абстрактное удобство выборки?
← →
ЮЮ © (2008-08-01 12:42) [17]> Пока сделал так:
>
>
> SELECT item.id, p.id, p.name
> FROM item
> LEFT JOIN (SELECT * FROM prop GROUP BY `item_id`) AS p
> ON p.item_id=item.id
> WHERE item.id IN (1,2)
Разве такое возможно?
> Пусть выберет ту, которую ему удобнее (например, первую
> в таблице).
SELECT item.id, p.id, p.name
FROM item
LEFT JOIN (SELECT item_id, MIN(Id) fistId FROM prop GROUP BY `item_id`) AS first_p ON first_p.item_id=item.id
LEFT JOIN prop p ON p.Id=first_p.fistId
← →
Anatoly Podgoretsky © (2008-08-01 16:35) [18]> Dmitry S (01.08.2008 10:10:11) [11]
Раз любую, то MAX или MIN и в случае подзапросов вариант ограничения выборки одной записью, в MySQL есть какое то средство для этого.
Страницы: 1 вся ветка
Текущий архив: 2009.04.05;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.006 c