Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

Помогите с запросом с присоединением (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
15-1233845470
Strate
2009-02-05 17:51
2009.04.05
Обеспечить безопасность сохранения данных


9-1177670225
ElectriC
2007-04-27 14:37
2009.04.05
Столкновение с mesh-объектом


2-1234650449
Johnnnn
2009-02-15 01:27
2009.04.05
Считывание данных с постоянно обновляющегося TXT?


2-1235039970
D@nger
2009-02-19 13:39
2009.04.05
ActionMainMenuBar и Border Icon


2-1234349665
harisma
2009-02-11 13:54
2009.04.05
ListView и позиционирование.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский