SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.12.2011 22:52:35

blackman
Участник
Зарегистрирован: 10.12.2011
Сообщений: 1

Запрос на выборку

Доброго времени суток.

Сижу над запросом и уже походу мозг начинает тупить.

Есть две таблицы — таблица `p` со статьями и `pt` с метками. К каждой статье идет много меток в таблице `pt` связаны они по ключу `id_p` в каждой таблице.

Таблци `p`:
SELECT * FROM `p`

Результат:
id_p | p_title
________________
1 | статья 1
2 | статья 2
3 | статья 3
4 | статья 4
.....
262 | статья 262

Таблица `pt:
SELECT * FROM `pt` WHERE `id_p` = 262

Результат:
id_pt | id_p | pt_val
_______________
7403 | 262 | 556
7402 | 262 | 535
7401 | 262 | 4448
7400 | 262 | 4447
7399 | 262 | 4445

Вопрос. Как записать условие WHERE что бы при выборе с таблицы `p` выбирались все записи с метками 4447 и 4448, но не с 556 и 535?

Я делаю:
SELECT * FROM `p`
INNER JOIN `pt`
WHERE `id_p` = 262 AND `pt_val` = 4447 AND `pt_val` = 4448

Результата ноль строк. Но если делать через OR то получается две записи с соответствующими метками:
SELECT * FROM `p`
INNER JOIN `pt`
WHERE `id_p` = 262 AND (`pt_val` = 4447 OR `pt_val` = 4448)

Нужно получить один. Но при большом количестве записей в таблице `p` и меток в `pt` в результат попадают записи с `p` которые там не должно быть

Неактивен

 

#2 10.12.2011 23:41:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Запрос на выборку

Попробуйте

SELECT p.*,pt.* FROM `p` INNER JOIN `pt`using(id_p)  WHERE `pt_val` in (4447,4448) AND `pt_val` not in (535,556);


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson