2016-07-01 3 views
0

У меня есть таблица с некоторыми элементами, относящимися к моделям автомобилей. Эти предметы могут иметь несколько категорий. Я должен выбрать все из них, которые относятся к автомобилям и во всех категориях категорий для каждого элемента, хранящегося в таблице sc_products.Или оператор возвращает больше строк, чем ожидалось mysql

Вот мой запрос:

SELECT 
t15_catalogue_line. 
T15_GROUP, 
sc_products.product_code, 
sc_products.unic, sc_products.name_ru, UPPER(TRIM(sc_products.brief_description_ru)) AS brief_description_ru, sc_products.suupplier, price.Price, sc_group_discounts.`action`, sc_group_discounts.procent, sc_products.productID, price.in_stock, price.supplier, t10_item.T10_ITEM, t10_item.unic, t10_item.T10_DESC, t10_item.T10_IMG, t10_item.T10_ITEM_GROUP, t10_item.T10_FIELD1, t10_item.T10_FIELD2, t10_item.T10_FIELD3, t10_item.T10_FIELD4, t10_item.T10_FIELD5, t10_item.T10_FIELD6, t10_item.T10_FIELD7, t10_item.T10_FIELD8, t10_item.T10_FIELD9, t10_item.T10_FIELD10, t10_item.T10_FIELD11, t14_item_fields.T14_ITEM_GROUP, t14_item_fields.T14_FIELD, t14_item_fields.T14_NAME, t14_item_fields.T14_UNIT, t14_item_fields.T14_SEARCH 
FROM 
sc_products 
LEFT OUTER JOIN t15_catalogue_line ON (sc_products.unic = t15_catalogue_line.unic) 
LEFT OUTER JOIN price ON (sc_products.unic = price.unic) AND (sc_products.suupplier = price.postavchik) 
LEFT OUTER JOIN sc_group_discounts ON (sc_products.item_group = sc_group_discounts.item_group) 
LEFT OUTER JOIN t10_item ON (sc_products.unic = t10_item.unic and sc_products.CatText=t10_item.CatText and sc_products.brief_description_ru=t10_item.brand) 
LEFT OUTER JOIN t14_item_fields ON (t10_item.T10_ITEM_GROUP = t14_item_fields.T14_ITEM_GROUP) 
WHERE 
sc_products.CatText = 'bracke mechanism' or 
sc_products.CatText='bracke montage ' or 
sc_products.CatText='hydraulic repair ' AND 
t15_catalogue_line.T15_CARTYPE = '30442' AND 
t15_catalogue_line.T15_GROUP = '666' and 
sc_products.unic is not null and 
sc_products. unic!='' 
GROUP BY sc_products.product_code,sc_products.brief_description_ru, sc_products.suupplier 
ORDER BY ISNULL(price.price),price.price ASC 

Запрос возвращает все элементы в этом caegories, и они не связаны с авто так таблица t15_catalog линия не принимает участия в запросе, что может быть решением

+0

Ваш вопрос будет легче понять, если вы используете круглые скобки '()' для группировки ваших предложений 'и' и 'или' в вашем запросе. Пожалуйста, отредактируйте свой вопрос, чтобы сделать это. –

+1

@ Столбец Олли Джонс мог бы даже решить свою проблему. –

+0

Извините, что не там, где они должны быть размещены, может быть, я неправильно понял что-то. – user3237076

ответ

1

Я очень подозреваю, что недостающие скобки () вокруг нескольких AND ваша проблема.

Запрос возвращает все элементы в этом caegories, и они не связаны с авто так строками таблицы t15_catalog не принимают участия в запросе, что может быть решением

Вашей группировка логик теперь делает именно то, что вы описываете, ниже того, что я думаю, что вы имели в виду сделать:

WHERE (sc_products.CatText = 'bracke mechanism' or sc_products.CatText='bracke montage ' or sc_products.CatText='hydraulic repair ') AND t15_catalogue_line.T15_CARTYPE = '30442' AND t15_catalogue_line.T15_GROUP = '666' and sc_products.unic is not null and sc_products. unic!='' GROUP BY sc_products.product_code,sc_products.brief_description_ru, sc_products.suupplier ORDER BY ISNULL(price.price),price.price ASC 
1

Эта логика:

a OR b OR c AND d эквивалентно a OR b OR (c AND d) и не (a OR b OR c) AND d, который, кажется, является тем, что вы хотите.

Вы должны добавить круглые скобки вокруг блока ИЛИ как это:

WHERE 
(
    sc_products.CatText = 'bracke mechanism' 
OR sc_products.CatText = 'bracke montage ' 
OR sc_products.CatText = 'hydraulic repair ' 
) 
AND t15_catalogue_line.T15_CARTYPE = '30442' 
AND t15_catalogue_line.T15_GROUP = '666' 
AND sc_products.unic is not null 
AND sc_products. unic!='' 
0

вы, вероятно, хотите использовать paranthesis в запросе для желаемого результата. Как насчет

SELECT 
    t15_catalogue_line. 
    T15_GROUP, 
    sc_products.product_code, 
    sc_products.unic, sc_products.name_ru, 
    UPPER(TRIM (sc_products.brief_description_ru)) AS brief_description_ru, 
    sc_products.suupplier, price.Price, sc_group_discounts.`action`, 
    sc_group_discounts.procent, sc_products.productID, 
    price.in_stock, price.supplier, t10_item.T10_ITEM, t10_item.unic, 
    t10_item.T10_DESC, t10_item.T10_IMG, t10_item.T10_ITEM_GROUP, 
    t10_item.T10_FIELD1, t10_item.T10_FIELD2, t10_item.T10_FIELD3, 
    t10_item.T10_FIELD4, t10_item.T10_FIELD5, t10_item.T10_FIELD6, 
    t10_item.T10_FIELD7, t10_item.T10_FIELD8, t10_item.T10_FIELD9, 
    t10_item.T10_FIELD10, t10_item.T10_FIELD11, 
    t14_item_fields.T14_ITEM_GROUP, t14_item_fields.T14_FIELD, 
    t14_item_fields.T14_NAME, t14_item_fields.T14_UNIT, 
    t14_item_fields.T14_SEARCH 
FROM 
    sc_products 
LEFT OUTER JOIN t15_catalogue_line ON 
    (sc_products.unic = t15_catalogue_line.unic) 
LEFT OUTER JOIN price ON 
    (sc_products.unic = price.unic) 
    AND (sc_products.suupplier = price.postavchik) 
LEFT OUTER JOIN sc_group_discounts ON 
    (sc_products.item_group = sc_group_discounts.item_group) 
LEFT OUTER JOIN t10_item ON 
    (sc_products.unic = t10_item.unic and 
    sc_products.CatText=t10_item.CatText and 
    sc_products.brief_description_ru=t10_item.brand) 
LEFT OUTER JOIN t14_item_fields ON 
    (t10_item.T10_ITEM_GROUP = t14_item_fields.T14_ITEM_GROUP) 
WHERE 
    (
     sc_products.CatText = 'bracke mechanism' 
    or 
     sc_products.CatText='bracke montage ' 
    or 
     sc_products.CatText='hydraulic repair ' 
    ) 
    AND t15_catalogue_line.T15_CARTYPE = '30442' 
    AND t15_catalogue_line.T15_GROUP = '666' 
    and sc_products.unic is not null 
    and sc_products. unic!='' 

GROUP BY 
    sc_products.product_code,sc_products.brief_description_ru, 
    sc_products.suupplier ORDER BY ISNULL(price.price), 
    price.price ASC 
Смежные вопросы