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

両方の戻りノード ID が等しいかどうかを MySQL クエリ内で確認することは可能ですか?

4

4 に答える 4

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

は、1 つのWHERE from_recipe + from_taxonomy = 1クエリにのみ含まれる行を返します。= 2残りの半分を見るために使用するか、完全にオフにしてどちらがどちらであるかを確認します。

于 2012-05-09T06:25:18.600 に答える
1

クエリで何かが等しいかどうかを確認する MYSQL には何もありません (異なるクエリから返される結果)
要件はビジネス ロジックです。したがって、最初のクエリの戻り値と 2 番目のクエリの戻り値を取得し、それらをコードで比較します。

于 2012-05-09T06:04:35.787 に答える
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

このクエリから結果が得られない場合、nid は一致しません。

于 2012-05-09T06:07:56.923 に答える
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')
于 2012-05-09T06:04:39.047 に答える