2015-10-15 38 views
0

存在我有两个表:categoriesprodvscats检查是否匹配的记录在连接表

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,以确定是否匹配(ES)存在:

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