检查ID是否存在表

时间:2017-02-16 03:39:07

标签: mysql

我对MYSQL很新,并且想要让它返回每个是否存在,但是显示的结果不是我所期望的。我运行了这个查询: -

SELECT product_id,code, 
    IF( EXISTS( SELECT 1 FROM product WHERE `product_id` IN ('001','002') ), 1, 0) AS exist 
FROM product 
WHERE `product_id` IN ('001','002');

表格: -

product_id | code 

001 | Dark

我的预期结果: -

product_id | code | exist

001 | Dark | 1

002 |      | 0

结果: -

product_id | code | exist

001 | Dark | 1

任何想法如何产生我预期的结果?

2 个答案:

答案 0 :(得分:0)

MySQL只是为您提供了正确的结果,没有id = '002'的记录,因此它不会包含在结果中。

保留程序的逻辑协议,而不是MySQL。

答案 1 :(得分:0)

如果我们想要在结果集中返回的product_id的值不在product表中(例如' 002'),我们需要引用包含的行源价值。

一种选择是使用内联视图。举个例子:

  SELECT i.product_id
       , p.code
       , IF(p.product_id IS NULL,0,1) AS `exist` 
    FROM ( 
           SELECT '001' AS product_id
           UNION ALL SELECT '002'
           UNION ALL SELECT '003'
         ) i
    LEFT
    JOIN product p
      ON p.product_id = i.product_id
   ORDER BY i.product_id

我们不必使用类似的内联视图。例如,如果我们有一个表或临时表,其中包含我们想要返回的值的行:

  SELECT i.product_id
       , p.code
       , IF(p.product_id IS NULL,0,1) AS `exist` 
    FROM all_possible_product_id i
    LEFT
    JOIN product p
      ON p.product_id = i.product_id
   WHERE i.product_id IN ('001','002')
   ORDER BY i.product_id