2012-05-09 150 views
0
SELECT r.nid 
FROM recipe_node_ingredient r,recipe_ingredient ri 
WHERE r.`ingredient_id` = ri.id 
AND ri.name = 'carrot' 
AND r.nid NOT IN (SELECT r.nid 
        FROM recipe_node_ingredient r,recipe_ingredient ri 
        WHERE r.`ingredient_id` = ri.id AND ri.name = 'salt'); 

这个查询将返回一个节点ID ..两个选择查询需要帮助

而这个查询还返回一个节点ID。

SELECT nid 
FROM taxonomy_index JOIN taxonomy_term_data USING (tid) 
WHERE name IN ('Desert."', 'Indian') 
GROUP BY nid HAVING COUNT(*) > 1 

是否可以在MySQL查询中检查两个返回节点ID是否相等..?

+0

你需要什么结果.... @ Parthi04 –

回答

1

MYSQL没有什么可以检查查询中是否有相同的结果(结果从不同的查询中返回)
您的需求是业务逻辑。因此,您将第一个查询的返回值和第二个查询的返回值进行比较,并在您的代码中进行比较!

0
select if(select r.nid from recipe_node_ingredient r,recipe_ingredient ri where 
r.`ingredient_id` = ri.id and ri.name = 'carrot' and r.nid 
NOT IN (select r.nid from recipe_node_ingredient r,recipe_ingredient ri 
where r.`ingredient_id` = ri.id and ri.name = 'salt') == (SELECT nid FROM taxonomy_index JOIN taxonomy_term_data 
USING (tid) WHERE name IN ('Desert."', 'Indian') 
GROUP BY nid HAVING COUNT(*) > 1),'true','false') 
1

那么,你可以尝试这样的事情:

SELECT * 
FROM (SELECT r.nid 
     FROM recipe_node_ingredient r, 
      recipe_ingredient ri 
     WHERE r.`ingredient_id` = ri.id 
     AND ri.name = 'carrot' 
     AND r.nid NOT IN (SELECT r.nid 
          FROM recipe_node_ingredient r, 
           recipe_ingredient ri 
          WHERE r.`ingredient_id` = ri.id 
          AND ri.name = 'salt')) subSelect1, 
    (SELECT nid 
     FROM taxonomy_index 
     JOIN taxonomy_term_data USING (tid) 
     WHERE name IN ('Desert."','Indian') 
     GROUP BY nid 
     HAVING COUNT(*) > 1) subSelect2 
WHERE subSelect1.nid = subSelect2.nid 

如果你没有得到从该查询结果,NIDS不匹配。

+0

感谢您的回复。此查询不返回任何结果。但实际结果是Node id = 10。 – Parthi04

1

如何使用FULL OUTER JOIN比较结果?

SELECT 
    nid, 
    IFNULL(from_recipe, 0) from_recipe, 
    IFNULL(from_taxonomy, 0) from_taxonomy 
FROM 
    (
    SELECT r.nid, 1 AS from_recipe 
    FROM  recipe_node_ingredient r 
    WHERE EXISTS (
       SELECT 1 FROM recipe_ingredient WHERE id = r.ingredient_id AND name = 'carrot' 
      ) 
      AND NOT EXISTS (
       SELECT 1 FROM recipe_ingredient WHERE id = r.ingredient_id AND name = 'salt' 
      ) 
) AS recipe 
    FULL OUTER JOIN (
    SELECT ti.nid, 1 AS from_taxonomy 
    FROM  taxonomy_index td 
      INNER JOIN taxonomy_term_data ti ON td.tid = it.tid 
    WHERE td.name IN ('Desert."', 'Indian') 
    GROUP BY ti.nid 
    HAVING COUNT(*) > 1 
) AS taxonomy ON recipe.nid = taxonomy.nid 
WHERE 
    IFNULL(from_recipe, 0) + IFNULL(from_taxonomy, 0) = 1 

WHERE from_recipe + from_taxonomy = 1将返回仅在一个查询中的行。使用= 2来查看另一半,或者完全关闭以查看哪个是哪个。