2016-06-28 2 views
0

Мне нужно сделать запрос. Например, у меня есть продукты и субпродукты. Субпродукты могут быть связаны с продуктами, поэтому мне нужен запрос, который дает мне результаты побочных продуктов, которые не связаны с определенным продуктом. Я сделал внутреннее соединение, но не прав.Mysql - Inner Join - получить не связанные результаты

SELECT * 
FROM subProducts 
    INNER JOIN products on subProducts.id != products.idSubProduct 
WHERE products.id = $idProduct 

Thank в

+0

Это было предложено несколько раз, прежде чем: http://stackoverflow.com/questions/13863751/why-inner-join-not-equal-hang-forever. Ваш запрос будет запущен для того, что будет выглядеть навсегда, поскольку вы пытаетесь связать что-либо, кроме соответствия, которое может быть всей остальной частью таблицы для каждой отдельной строки. Я предполагаю, что вы не смогли бы полностью завершить это в зависимости от того, сколько у вас данных. – Dresden

ответ

1

Используйте outer join вместо с null проверки:

SELECT * 
FROM subProducts 
    LEFT JOIN products on subProducts.id = products.idSubProduct 
     AND products.id = $idProduct 
WHERE products.id IS NULL 

Есть другие способы сделать это, а также - not in и not exists могут работать аналогичным образом. Вот с помощью not exists:

SELECT * 
FROM subProducts s 
WHERE NOT EXISTS (
    SELECT 1 
    FROM products p 
    WHERE p.idSubProduct = s.id AND p.id = $idProduct 
    ) 
+0

Как я могу передать первый запрос в laravel? Я не знаю, как использовать AND в laravel и не работает с тем, где. благодаря – user3242861