пожалуйста помогите с запросом.

ilya20000

Новичок
пожалуйста помогите с запросом.

id_tovarproperty|tovar_id_tovar|property_id_property
1 | 1 | 9
2 | 1 | 12
3 | 2 | 12

Спрошу, может реально выбрать одну запись tovar_id_tovar которая попадает под условие property_id_property=9 AND property_id_property=12 ?
то есть в моём конкретном случае это должен быть tovar_id_tovar=1

селект с AND не показывает
а если делать OR то вылазиет и tovar_id_tovar=1 и tovar_id_tovar=2 а это не нужно...

может быть можно выбрать это 1 запросом?
 

Вурдалак

Продвинутый новичок
Какая из записей должна быть выбрана? Любая? Например, GROUP BY tovar_id_tovar
 

ilya20000

Новичок
Вурдалак
запись должна быть tovar_id_tovar=1 потамучто у неё есть
property_id_property=9 и property_id_property=12
если просто property_id_property=12 то такая запись не нужна.

dimagolov
чесно сказать такое join слово первый раз вижу, почитал в интернете это я так понял соединение таблицы с другой, тоесть если саму на себя то типа копия появится столбца property_id_property и тогда я смогу выбрать в одной копии 9 а в другой 12 я правильно понял?
если так то property_id_property=9 AND property_id_property=12 AND property_id_property=13 AND property_id_property=20 и т.д. мне придётся несколько раз саму на себя или я всё же что то не понял?
 

Вурдалак

Продвинутый новичок
ilya20000
А пара (tovar_id_tovar, property_id_property) — уникальная? Тогда можно было бы так:

[sql]SELECT tovar_id_tovar, SUM(property_id_property IN (9, 12)) AS s FROM tbl GROUP BY tovar_id_tovar HAVING s = 2;[/sql]
, где вместо 2 — количество значений (9, 12, ...)
 

dimagolov

Новичок
ilya20000, если используешь таблицу более одного раза в запросе, то тебе нужно давать ей псевдонимы (select tab as t1...) и обращаться к полям через псевдоним.

join делает суперпозицию двух таблиц, то есть к каждой строке первой таблице добавляется строка второй таблицы, которая удовлетворяет условию. очевидно, что таких строк может быть более чем одна, тогда будет выглядить так:
t1.row1, t2.row1
t1.row1, t2.row2
t1.row1, t2.row3
если join inner, то строки из t1, которым не нашлось пары будут исключены из выборки.
если join left, то к строкам из t1, которым не нашлось пары вместо строк из t2 будут добавлены NULL значения.
 
Сверху