Mysql выбрать нет отношения из двух таблиц - PullRequest
0 голосов
/ 18 октября 2018

У меня есть две таблицы, первая из которых имеет PRODUCTS_ID, а вторая таблица имеет отношение между продуктами, например, продукт 1 имеет отношение к продукту (2,3,4,5), как показано в PRODUCT_CONN.Что мне нужно, чтобы получить продукты, перечисленные в Таблице 1, которые не имеют отношения к продукту 1, то результат должен быть примерно таким: «6,7,8».

TABLE 1
========
PRODUCTS_ID
    1   
    2   
    3   
    4
    5
    6
    7
    8   

TABLE2
======
PRODUCT_ID  | PRODUCT_CONN
    1       |   2
    1       |   3
    1       |   4
    1       |   5

1 Ответ

0 голосов
/ 18 октября 2018

Один из способов сделать это - объединить обе таблицы, а затем отфильтровать строки для удаления тех, которые имеют отношения с продуктом ID 1 , как в следующем примере:

SELECT
    TABLE_1.PRODUCTS_ID
FROM
   TABLE_1
LEFT JOIN
   TABLE_2 ON TABLE_2.PRODUCT_CONN = TABLE_1.PRODUCTS_ID
WHERE
   TABLE_1.PRODUCTS_ID <> 1
AND
   (TABLE_2.PRODUCT_ID IS NULL OR TABLE_2.PRODUCT_ID <> 1)

В качестве альтернативы, вы можете сначала выбрать все идентификаторы, которые подключены к продукту с ID 1 , а затем выбрать все идентификаторы, которые не входят в этот набор, за исключением продукта ID 1 , например, так:

SELECT
    PRODUCTS_ID
FROM
    TABLE_1
WHERE
    PRODUCTS_ID NOT IN (SELECT PRODUCT_CONN
                        FROM TABLE_2
                        WHERE PRODUCT_ID = 1)
AND
    PRODUCTS_ID <> 1;
...