2017-02-16 130 views
0

我是MYSQL的新手,想让它返回每一个无论是否存在,但显示的结果并不是我所期望的。我跑这个查询: -检查ID是否存在表

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 

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

+0

为什么不将该ID设置为“unique”,因此绝对不会重复。 –

回答

0

MySQL只是给你正确的结果,id = '002'没有记录,所以它不会被包含在结果中。

让你的程序保留逻辑处理,但不是MySQL。

+0

是否有任何可能的方式通过MYSQL来完成? – MuthaFury

+0

@MuthaFury你最好了解数据库的工作原理。您正在过滤结果,但不会扩展结果。如果你想显示你所期望的结果,你必须准备一个虚拟结果集,它有你在条件中指定的id。 – xdazz

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