2015-10-15 3 views
0

У меня есть две таблицы: categories и prodvscatsПроверьте соответствие запись существует в объединенной таблице

categories    prodvscats 

    id   |  id  
    title   |  categories_id 

каждая таблица имеет несколько строк, например:

categories    prodvscats 

    categ1   |  categ1  
    categ2   |  categ2 
    categ3 
    categ4 

Я хотел бы вернуть все категории, но я хотите знать, какие из них существуют в таблице prodvscats.

Желаемый результат:

title    boolean variable exists 
    categ1   |  1  
    categ2   |  1 
    categ3   |  0 
    categ4   |  0 

Я попытался с join но он возвращает только первые две строки. Может быть, ему нужно что-то вроде случая, но я не знаю, как это сделать.

SELECT categories.id, categories.title 
FROM categories 
     INNER JOIN prodvscats ON prodvscats.categories_id = categories.id 
ORDER BY id 

ответ

1

Используйте LEFT JOIN, чтобы присоединиться к двум столам. Это вернет все строки, включая те, где категория не существует в другой таблице. Затем используйте GROUP BY закрепить категории и COUNT определить, если матч (а) существуют:

SELECT 
    categories.id, 
    categories.title, 
    CASE WHEN COUNT(prodvscats.id) = 0 THEN 0 ELSE 1 END AS product_exists 
FROM categories 
LEFT JOIN prodvscats ON categories.id = prodvscats.categories_id 
GROUP BY categories.id, categories.title 
1

Попробуйте, как это

SELECT categories.id, categories.title, 
IF(prodvscats.categories_id IS NULL, '0', '1') AS exists_value 
FROM categories 
LEFT JOIN prodvscats ON prodvscats.categories_id = categories.id 
ORDER BY id