Помогите с запросом

PHPer

Новичок
Помогите с запросом

Есть таблицы `countries`(`countryID`) и `messages`(`countryID`, `from`). Необходимо:
Выбрать 5 последних записей из `countries` таких, что в `messages` нет записей
с (counties.countryID = messages.countryID)and(`from`='loose').
Выбрать необходимо именно 5 последних записей, удовлетворяющих этому условию.
В `messages` может быть несколько записей с одним и тем же countryID
 

MD

Guest
SELECT A.ID
FROM A
LEFT JOIN B ON B.ID = A.ID AND B.from = 'loose'
WHERE B.ID IS NULL
ORDER BY A.ID DESC
LIMIT 5

думаю суть тебе понятна. читай про лефт джоин.
 

PHPer

Новичок
Автор оригинала: MD
SELECT A.ID
FROM A
LEFT JOIN B ON B.ID = A.ID AND B.from = 'loose'
WHERE B.ID IS NULL
ORDER BY A.ID DESC
LIMIT 5

думаю суть тебе понятна. читай про лефт джоин.
Что интересно, тоже сначала LEFT JOIN использовал) Немного неправильно написал: `from`!='loose' должно быть.
Проблема в том, что, как я выше написал, в `messages` может быть несколько записей с одним и тем же countryID, поэтому запрос с LEFT JOIN выберет все эти записи, из `countries` им одна и та же запись будет соответствовать.
 

PHPer

Новичок
Напиши, плз тада, где DISTINCT вставить. Если SELECT DISTINCT(a.id), то также будут выбраны записи, которые не нужны: например, в `messages` есть 2 записи с одним и тем же countryID, в одной `from`='', в другой `from`='loose'. Запись, соответствующая `from`='' будет выбрана. Наверное, я неясно объяснил, какие записи мне нужны. Ща еще раз попробую...

Нужны такие countryID таблицы`countries`, что в `messages` не существует записи где (messages.countryID = countries.countryID и `from`= 'loose').
 

MD

Guest
твоим условиям полностью отвечает запрос, который я написал тебе в первом ответе. :)
он выбирает 5 последних записей из А, для которых нет записей с from='loose' в таблице Б.
 

PHPer

Новичок
Автор оригинала: MD
твоим условиям полностью отвечает запрос, который я написал тебе в первом ответе. :)
он выбирает 5 последних записей из А, для которых нет записей с from='loose' в таблице Б.
Точно! Я проглючил) Спасибо!
 
Сверху