-
Есть таблица 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 не имеет значения. Что надо изменить в запросе?
-
Опечатка, правильно так: А надо, чтобы запрос вернул только две строки, к примеру: 1 1 somename1 2 3 somename3
-
Пока сделал так:
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
-
SELECT i.id, p.id, p.name
FROM item AS i
INNER JOIN prop AS p ON i.id=ip.id
-
опечатка SELECT i.id, p.id, p.name
FROM item AS i
INNER JOIN prop AS p ON i.id=p.id
-
> Необходимо выбрать записи из таблицы item и к каждой записи > присоединить какую-нибудь (любую) одну запись из таблицы prop.
довольно странная задача пояснишь?
-
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] в принципе неполучаем :)
-
> в принципе неполучаем получаем, т.к. есть приписка > Какую именно строку выберит MySQL из таблица prop не имеет значения. вот это > 3 somename3 из таблици prop.
т.что sniknik © (31.07.08 20:02) [4] вполне подойдет. твое нет, т.к. у тебя данные могут быть из разных строк prop-а, а говорилось только про одну но любую.
-
> sniknik © (31.07.08 21:28) [7] > > в принципе неполучаем > получаем, т.к. есть приписка > Какую именно строку выберит MySQL из таблица prop не имеет значения. вот это > 3 somename3 из таблици prop.
Но эта запись не присоединяется к 2запросом [4]
> т.что sniknik © (31.07.08 20:02) [4] вполне подойдет.твое > нет, т.к. у тебя данные могут быть из разных строк prop- > а, а говорилось только про одну но любую.
Да-да, про вообще любую недоглядел...:)))
-
Полная неопределенность выбора ... зачем тогда присоединять? Надо как-то конкретизировать, по какому правилу выбирать... Всегда первую или последнюю, или с масимальным значением, медиану или по случайному закону... А совсем любую, это значит - на Ваше усмотрение, или советчика. Вот и выберите правило, наиболее удобное для Вас, если в задаче оно не указано. Что будет для Вас "выбрать любую"?
-
Не возможно, prop.id = 3 не существует.
-
Моя ошибка - надо было сразу выдать реальную задачу. Есть таблица, к примеру, новостей (item). У каждой новости могут быть фотографии (prop), сколько угодно. Нужно выбрать список новостей, и к каждой новости выбрать одну (любую) из ее фотографий.
-
> Нужно выбрать список новостей, и к каждой новости выбрать > одну (любую) из ее фотографий.
Заменю (любую) в своем ТЗ на (первую, c наименьшим Id), (последнююю), ... Сам сначала определись, прежде чем сервер терзать.
-
> Заменю (любую) в своем ТЗ на (первую, c наименьшим Id), > (последнююю), ... > Сам сначала определись, прежде чем сервер терзать. >
Зачем лишний раз нагружать сервер. Пусть выберет ту, которую ему удобнее (например, первую в таблице).
-
> [13] Dmitry S © (01.08.08 10:36) > например, первую в таблице
Это которую?
> которую ему удобнее А если несколько одинаково удобно. Он железяка тупая - он думать не может. И ошибаются те, кто думает, что он думает.
-
> Он железяка тупая - он думать не может. И ошибаются те, > кто думает, что он думает.
Однако понять, иносказательно выражаясь, на что потребуется меньше времени она может!
-
> [15] Dmitry S © (01.08.08 11:22) > Однако понять, иносказательно выражаясь, на что потребуется > меньше времени она может!
Ты предлагаешь ей проанализировать ВСЕ варианты и выбрать оптимальный? Может проще самому сформулировать ЧЕТКОЕ условие, чем предлагать серверу смотреть на абстрактное удобство выборки?
-
> Пока сделал так: > > > 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
-
> Dmitry S (01.08.2008 10:10:11) [11]
Раз любую, то MAX или MIN и в случае подзапросов вариант ограничения выборки одной записью, в MySQL есть какое то средство для этого.
|